Как передать аргументы в memcheck с помощью ctest? - PullRequest
0 голосов
/ 10 октября 2018

Я хочу использовать ctest из командной строки для запуска моих тестов с memcheck и передать аргументы для команды memcheck.

Я могу запустить ctest -R my_test, чтобы запустить свой тест, и я даже могу запустить ctest -R my_test -T memcheck чтобы запустить его через memcheck.

Но я не могу найти способ передать аргументы этой команде memcheck, как --leak-check=full или --suppressions=/path/to/file.

После прочтения документации ctest я попытался использовать опцию -D с CTEST_MEMCHECK_COMMAND_OPTIONS и MEMCHECK_COMMAND_OPTIONS.Я также попытался установить их как переменные среды.Ни одна из моих попыток не привела ни к какому другому тесту.Это всегда:

Memory check command: /path/to/valgrind "--log-file=/path/to/build/Testing/Temporary/MemoryChecker.7.log" "-q" "--tool=memcheck" "--leak-check=yes" "--show-reachable=yes" "--num-callers=50"

Как я могу управлять командой memcheck из командной строки ctest?

1 Ответ

0 голосов
/ 13 мая 2019

TL; DR

ctest --overwrite MemoryCheckCommandOptions="--leak-check=full --error-exitcode=100" \
      --overwrite MemoryCheckSuppressionFile=/path/to/valgrind.suppressions \
      -T memcheck

Объяснение

Я наконец нашел правильный способ переопределить такие переменные, но, к сожалению, это нелегко понять из документации,Итак, чтобы помочь следующей бедной душе, которая должна с этим справиться, вот мое понимание различных способов установки опций для memcheck.

В CTestConfig.cmake в вашем источнике высшего уровня dir,или в CMakeLists.txt ( до вызова include(CTest)) вы можете установить MEMORCHECK_COMMAND_OPTIONS или MEMORYCHECK_SUPPRESSIONS_FILE.Когда вы include(CTest), CMake сгенерирует DartConfiguration.tcl в вашем каталоге компоновки, а установка вышеупомянутых переменных заполнит MemoryCheckCommandOptions и MemoryCheckSuppressionFile соответственно в этом файле.Это файл, который ctest анализирует в вашем каталоге сборки, чтобы заполнить его внутренние переменные для выполнения шага memcheck.Так что, если вы хотите установить параметры вашего проекта для memcheck во время конфигурации cmake, это способ получить.

Если вместо этого вы хотите изменить эти параметры после того, как у вас уже есть правильно настроенный каталог сборки, вы можете:

  1. Изменить DartConfiguration.tcl напрямую, но учтите, что это будет перезаписано, если cmake будет запущен снова, так как этот файл обновляется каждый раз при запуске cmake.
  2. Используйтеctest --overwrite опция командной строки, чтобы установить эти опции memcheck только для этого запуска.

Notes

  1. Я видел упоминаний онлайн изпеременная CMAKE_MEMORYCHECK_COMMAND_OPTIONS.Я понятия не имею, что это за переменная, и я не думаю, что cmake знает об этом каким-либо образом.
  2. Установка CTEST_MEMORYCHECK_COMMAND_OPTIONS (переменная, которая на самом деле задокументирована в документации по cmake) в вашем CTestConfig.cmake или CMakeLists.txt не действует.Кажется, эта переменная работает только в «Клиентских сценариях CTest» , которые я никогда не использовал.
  3. К сожалению, и MEMORCHECK_COMMAND_OPTIONS, и MEMORYCHECK_SUPPRESSIONS_FILE явно не задокументированы в cmake , только косвенно, в документации ctest и учебнике Testing With CTest .

Когда в сборке запускается ctest, онанализирует файл для заполнения внутренних переменных: https://cmake.org/cmake/help/latest/manual/ctest.1.html#dashboard-client-via-ctest-command-line Мне не ясно, как это взаимодействует с

...