我想使用ctest与valgrind一起运行测试。 因此,我在cmake文件中写了以下内容:
include(CTest)
find_program(MEMORYCHECK_COMMAND valgrind)
set(MEMORYCHECK_COMMAND_OPTIONS "--leak-check=full --error-exitcode=1")
set(MEMORYCHECK_SUPPRESSIONS_FILE "${PROJECT_SOURCE_DIR}/.valgrind-suppressions")
这似乎有效。当我在一个泄漏的程序上运行ctest -D ExperimentalMemCheck .
时,它表明已发现内存泄漏,但是不会以状态!= 0退出。
如何在失败时获得退出代码1?
答案 0 :(得分:2)
关键是将set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1")
置于include(CTest)
调用之上。显然,仅在首次包含CTest时才考虑该变量,而在包含CTest之后对其进行设置则无效。
然后调用ctest -T memcheck
时,该命令将以非零退出状态正确退出。
也请参阅以下问题以供参考:How to pass arguments to memcheck with ctest?
答案 1 :(得分:0)
默认情况下,valgrind memcheck退出,并显示错误消息,确定并可能发生泄漏。
您可能希望有更多的泄漏类型导致错误退出, 通过使用--errors-for-leak-kinds:
--errors-for-leak-kinds=kind1,kind2,.. which leak kinds are errors? [definite,possible] where kind is one of: definite indirect possible reachable all none