【发布时间】:2018-11-04 13:21:58
【问题描述】:
我正在努力为我的 travis 构建添加内存检查测试。
通常我使用 ctest --verbose 运行我的测试。我得到了一个很好的输出:
2: [ RUN ] ContainsNoneTest.GivenSomeOfTheValuesShouldReturnFalse
2: [ OK ] ContainsNoneTest.GivenSomeOfTheValuesShouldReturnFalse (0 ms)
2: [----------] 4 tests from ContainsNoneTest (0 ms total)
2:
2: [----------] Global test environment tear-down
2: [==========] 49 tests from 13 test cases ran. (1 ms total)
2: [ PASSED ] 49 tests.
2/2 Test #2: LangTest ......................... Passed 0.00 sec
100% tests passed, 0 tests failed out of 2
Total Test time (real) = 0.20 sec
现在,我想添加 valgrind。我在其中一种方法中放了一个小漏洞,用ctest --verbose -T memcheck 运行测试:
2: [ RUN ] ContainsNoneTest.GivenSomeOfTheValuesShouldReturnFalse
2: [ OK ] ContainsNoneTest.GivenSomeOfTheValuesShouldReturnFalse (2 ms)
2: [----------] 4 tests from ContainsNoneTest (8 ms total)
2:
2: [----------] Global test environment tear-down
2: [==========] 49 tests from 13 test cases ran. (453 ms total)
2: [ PASSED ] 49 tests.
2/2 MemCheck #2: LangTest ......................... Passed 1.00 sec
2: process test output now: LangTest LangTest
PostProcessTest memcheck results for : LangTest
100% tests passed, 0 tests failed out of 2
Total Test time (real) = 6.56 sec
-- Processing memory checking output:
2/2 MemCheck: #2: LangTest ......................... Defects: 12
MemCheck log files can be found here: ( * corresponds to test number)
/home/rumcajs/CLionProjects/ModernCppChallenge/cmake-build-debug/Testing/Temporary/MemoryChecker.*.log
Memory checking results:
Memory Leak - 12
太棒了,valgrind 检测到了泄漏。不幸的是,该进程以返回码 0 退出(使用 echo $? 检查)。有没有办法在检测到泄漏时更改ctest 行为以输出非零返回码?正则表达式 stdout 或 valgrind 输出文件似乎不文明和野蛮,我想避免它。
【问题讨论】:
-
通过
valgrind --help搜索并找到--error-exitcode,也许你会想用它? -
我真的没想到 valgrind 有这么好的东西。太棒了,谢谢。