如何让 CMake / CTest memcheck 在失败时以状态码 1 退出?

Arw*_*ett 8 c valgrind cmake ctest

我想用 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")
Run Code Online (Sandbox Code Playgroud)

这似乎有效。当我ctest -D ExperimentalMemCheck .在一个泄漏的程序上运行时,它向我显示它发现了内存泄漏,但没有以状态 != 0 退出。

如何在失败时获得退出代码 1?

phd*_*phd -1

默认情况下,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
Run Code Online (Sandbox Code Playgroud)

  • 问题不在于 valgrind。如果我手动运行 valgrind,我会得到正确的退出状态。我希望 ctest 返回非零退出状态。 (2认同)