cmake - 如何让 ctest 在没有 dart 的情况下使用 valgrind 运行程序?

标签 cmake valgrind

我想编写一个 CMakeLists.txt 以便我可以正常或使用 valgrind 运行我的测试。我已经看到很多关于将 ctest 与 valgrind 集成的情况,但所有这些都假设您要设置服务器以将测试结果提交到 dart 仪表板。我只想在我的机器上运行测试并在命令行上查看结果。

如果我必须做一个 cmake -D VALGRIND=ON 那很好,但如果可能的话,我宁愿生成名为“foo”和“valgrind_foo”的测试。

最佳答案

我使用 valgrind 进行内存检查。为了配置 valgrind,我在构建系统中定义了以下变量:

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

此外,还有我的 valgrind 抑制文件:
set( MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/valgrind_suppress.txt" )

在编写 CMakeLists.txt 文件并在其中正确配置 valgrind 后,您可以运行以下命令:
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)

这将欺骗您的构建系统在本地运行测试自动化。它希望你运行:
ctest -R testName -D ExperimentalSubmit

接下来,提交到(默认的或您的)仪表板,但您不需要通过此步骤来运行您想要的。结果将存储在 Testing/Temporary/目录中。

关于cmake - 如何让 ctest 在没有 dart 的情况下使用 valgrind 运行程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303711/

相关文章:

javascript - 使用 cocos2d-js 设置 jsbindings 类的正确方法是什么?

cmake - 在 CMake 中,是否可以构建从构建树导入的依赖项?

c++ - 如何将版本号从git标记传输到CPack生成的源包?

c - Valgrind 无效读取

debugging - 减慢 gdb 以重现错误

iphone - valgrind和iphone

cmake 一个模块包含另一个模块

c++ - CMake Visual Studio 找不到库

c - 为什么 valgrind 报告 glibc tsearch() 随机泄漏内存?

valgrind - 使用 Valgrind 运行时 mmap 返回 EINVAL