gpt4 book ai didi

c++ - 设置返回值时忽略 "still reachable"

转载 作者:可可西里 更新时间:2023-11-01 16:23:59 27 4
gpt4 key购买 nike

在 CI 系统中,我使用 valgrind 运行一堆测试,如果 valgrind 没有发现错误,我期望返回值 0,否则返回 1。测试本身成功运行并返回 0

这就是 error-exitcode 的用途:

--error-exitcode=<number> exit code to return if errors found [0=disable]

现在我有一个程序可以从第 3 方库生成 still reachable。不理想,但还可以。我尝试通过以下调用来定义 still reachable 不是错误:

valgrind --errors-for-leak-kinds=definite,indirect,possible --error-exitcode=1 ./tests

打印

==9198== LEAK SUMMARY:
==9198== definitely lost: 0 bytes in 0 blocks
==9198== indirectly lost: 0 bytes in 0 blocks
==9198== possibly lost: 0 bytes in 0 blocks
==9198== still reachable: 392 bytes in 4 blocks
==9198== suppressed: 0 bytes in 0 blocks

但仍然返回 1

有没有办法忽略返回值中的still reachable

最佳答案

长话短说:使用

valgrind --leak-check=full --error-exitcode=1 ./tests

好吧,我想我在构建 SSCCE 时找到了答案

中南合作商会

memLeakTest.cpp

#include <cstdlib>
#include <iostream>

void makeDefinitelyLostPointer()
{
int* definitelyLostPointer = new int(5555);
(*definitelyLostPointer) += 1;
}

void makeStillReachablePointer()
{
int* stillReachablePointer = new int(3333);
std::exit(0);
(*stillReachablePointer) += 1;
}

int main()
{
//makeDefinitelyLostPointer();
makeStillReachablePointer();
return 0;
}
  1. 运行 g++ memLeakTest.cpp -o memLeakTest
  2. 运行./memLeakTest; echo $?,显示返回值0
  3. 运行 valgrind ./memLeakTest; echo $?, 返回 0
  4. 运行 valgrind --leak-check=full --error-exitcode=1 ./memLeakTest,如果 makeDefinitelyLostPointer() 则返回 0如果启用了 makeDefinitelyLostPointer(),则禁用和 1。在这两种情况下,仍然可以到达。

关于c++ - 设置返回值时忽略 "still reachable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27698144/

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