Jak sprawić, by ctest uruchamiał program z valgrind bez dart?

Chcę napisać Cmakelist.txt tak, że mogę uruchomić moje testy normalnie lub z valgrind. Widziałem wiele na temat integracji ctest z valgrind, ale wszystko z założeniem, że chcesz skonfigurować serwer do przesyłania wyników testów do pulpitu dartowego. Chcę tylko uruchomić testy na moim komputerze i zobaczyć wyniki w wierszu poleceń.

Jeśli muszę zrobić cmake-D VALGRIND=na to dobrze, ale wolałbym wygenerować testy o nazwie " foo " i "valgrind_foo", jeśli to możliwe.

Author: leif, 2012-02-16

3 answers

Używam valgrind do sprawdzania pamięci. Aby skonfigurować valgrind, definiuję następujące zmienne w moim systemie budowania:

find_program( MEMORYCHECK_COMMAND valgrind )
set( MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full" )

Poza tym jest tam mój plik valgrind:

set( MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/valgrind_suppress.txt" )

Po tym jak napiszesz swoje Cmakelisty.pliki txt i poprawnie skonfigurować w nich valgrind, można uruchomić następujące polecenie:

cmake -G ... (to configure your build)
ctest -D ExperimentalBuild (this will build your code)
ctest -R testName -D ExperimentalTest (just runs the test)
ctest -R testName -D ExperimentalMemCheck (to run the test under valgrind)

To zmusi twój system budowania do uruchomienia automatyzacji testów lokalnie. Oczekuje, że uruchomisz:

ctest -R testName -D ExperimentalSubmit

Następnie, aby przesłać do (domyślnego lub Twojego) Pulpit nawigacyjny, ale nie musisz przechodzić przez ten krok, aby uruchomić to, co chcesz. Wyniki będą przechowywane w katalogu Testing/Temporary/.

 22
Author: KlingonJoe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-30 03:58:44

Wygląda na to, że wystarczy. Wcześniej nie używałem separate_arguments, to była moja głupota.

function(add_memcheck_test name binary)
  set(memcheck_command "${CMAKE_MEMORYCHECK_COMMAND} ${CMAKE_MEMORYCHECK_COMMAND_OPTIONS}")
  separate_arguments(memcheck_command)
  add_test(${name} ${binary} ${ARGN})
  add_test(memcheck_${name} ${memcheck_command} ./${binary} ${ARGN})
endfunction(add_memcheck_test)

function(set_memcheck_test_properties name)
  set_tests_properties(${name} ${ARGN})
  set_tests_properties(memcheck_${name} ${ARGN})
endfunction(set_memcheck_test_properties)
 6
Author: leif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-16 01:07:20

Mój przypadek był na tyle prosty, że po prostu użyłem niestandardowego celu:

project(bftest)

add_executable(bftest main.c)

target_link_libraries(bftest LINK_PUBLIC bf)

find_program(VALGRIND "valgrind")
if(VALGRIND)
    add_custom_target(valgrind
        COMMAND "${VALGRIND}" --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes $<TARGET_FILE:bftest>)
endif()
 0
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-31 19:35:54