gpt4 book ai didi

command-line - 如何使用ctest将参数传递给memcheck?

转载 作者:行者123 更新时间:2023-12-03 23:36:42 29 4
gpt4 key购买 nike

我想从命令行使用 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_OPTIONSMEMCHECK_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"

如何从 ctest 命令行控制 memcheck 命令?

最佳答案

TL;DR

ctest --overwrite MemoryCheckCommandOptions="--leak-check=full --error-exitcode=100" \
--overwrite MemoryCheckSuppressionFile=/path/to/valgrind.suppressions \
-T memcheck
解释
我终于找到了覆盖这些变量的正确方法,但不幸的是,从文档中理解这一点并不容易。
所以,为了帮助下一个需要处理这个问题的可怜人,这里是我对设置 memcheck 选项的各种方法的理解。
在顶级源目录中的 CTestConfig.cmakeCMakeLists.txt 中(在调用 include(CTest) 之前),您可以设置 MEMORYCHECK_COMMAND_OPTIONSMEMORYCHECK_SUPPRESSIONS_FILE
当您 include(CTest) 时,CMake 将在您的构建目录中生成一个 DartConfiguration.tcl 并且设置上述变量将分别在该文件中填充 MemoryCheckCommandOptionsMemoryCheckSuppressionFile
这是 ctest 在您的构建目录中解析以填充其内部变量以运行 memcheck 步骤的文件。
因此,如果您想在 cmake 配置期间为 memcheck 设置项目选项,这就是方法。
如果您想在已经正确配置构建目录后修改这些选项,您可以:
  • 直接修改DartConfiguration.tcl,但是注意cmake再次运行会覆盖这个文件,因为每次cmake运行都会重新生成这个文件。
  • 使用 ctest --overwrite 命令行选项为该运行设置这些 memcheck 选项。

  • 笔记
  • 我在网上看到过 mentionsCMAKE_MEMORYCHECK_COMMAND_OPTIONS 变量。我不知道这个变量是什么,我不认为 cmake 以任何方式意识到它。
  • 在您的 CTEST_MEMORYCHECK_COMMAND_OPTIONSCTestConfig.cmake 中设置 CMakeLists.txt(在 cmake 文档中实际上是 documented 的变量)不起作用。似乎这个变量只适用于我从未使用过的 "CTest Client Scripts"
  • 不幸的是,MEMORYCHECK_COMMAND_OPTIONSMEMORYCHECK_SUPPRESSIONS_FILE 都没有明确记录在 cmake 中,只是间接地记录在 ctest 文档和 Testing With CTest 教程中。

  • ctest 在构建中运行时,它会解析文件以填充其内部变量:
    https://cmake.org/cmake/help/latest/manual/ctest.1.html#dashboard-client-via-ctest-command-line
    我不清楚这是如何与

    关于command-line - 如何使用ctest将参数传递给memcheck?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52730994/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com