首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在运行时使用Valgrind检查实际的内存泄漏?

如何在运行时使用Valgrind检查实际的内存泄漏?
EN

Stack Overflow用户
提问于 2014-10-01 16:39:09
回答 3查看 5.4K关注 0票数 4

在一些程序中,一些分配的内存根本不会被破坏,但它们在程序的整个运行时都是必需的。因此,通常被认为是安全的。

但是,还有一些对象并不打算在整个程序运行时使用,但由于开发人员未命中而没有销毁。这些是应该解决的实际内存泄漏。

当我们运行下面的Valgrind命令时,它只显示程序执行结束后的总泄漏数。因此,有人可以澄清如何区分上述两种情况与Valgrind泄漏检查输出。

用于检测内存泄漏的命令;

代码语言:javascript
运行
复制
valgrind --log-file=valgrind_output.txt --tool=memcheck --leak-check=yes ./MyTestProgram

执行结束时的典型输出;

代码语言:javascript
运行
复制
==10108== LEAK SUMMARY:
==10108==    definitely lost: 392,323 bytes in 1,164 blocks
==10108==    indirectly lost: 178,120 bytes in 4,283 blocks
==10108==      possibly lost: 170,155,118 bytes in 3,347,087 blocks
==10108==    still reachable: 263,778,326 bytes in 3,935,669 blocks

在Valgrind中有像IBM Purify工具中的Tap这样的特性,它可以在运行时检测当前泄漏的内存吗?

EN

回答 3

Stack Overflow用户

发布于 2014-10-03 03:45:51

您可以使用两种不同的技术在执行过程中进行泄漏搜索。

从命令启动vgdb

  1. leak_check leak_check监视器命令还有其他可选参数,例如,查找可访问的内存,或者只是增加的内存,或者...有关详细信息,请参阅valgrind用户手册:http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.monitor-commands
  2. Inside您的程序:您可以在您的程序中添加客户端请求以进行泄漏搜索。例如,插入对VALGRIND_DO_LEAK_CHECK或VALGRIND_DO_ADDED_LEAK_CHECK的“调用”请参阅http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.clientreqs了解更多详细信息
票数 3
EN

Stack Overflow用户

发布于 2014-10-01 16:44:36

在Valgrind中有像IBM Purify工具中的Tap这样的特性,它可以在运行时检测当前泄漏的内存吗?

不,没有。Valgrind不知道是否有泄漏,除非程序结束,因为它不知道程序结束时会释放什么。

票数 1
EN

Stack Overflow用户

发布于 2016-01-07 17:12:23

您可以让您的程序在运行期间故意崩溃,以确保您可以在该点检查分配的内存。您可以通过为一些用户定义的信号添加一个信号处理程序来实现这一点,比如SIGUSR1。

代码语言:javascript
运行
复制
signal(SIGUSR1, myhandler); 

在你的处理程序中,你可以这样做:

代码语言:javascript
运行
复制
printf("debug exit!\n"); 
int *ptr = 0; 
*ptr = 0xdeadbeef; 

然后,您可以像这样将此信号发送到您的应用程序:

代码语言:javascript
运行
复制
kill -s SIGUSR1 `ps -aux| grep myapp | head -n -1 | awk '{print $2}'`

然后,您可以检查已分配对象数量的差异。如果你知道数字应该保持不变,或者如果某个数字一直在增长,那么你可以检查发生这种情况的地方,看看那里是否有内存泄漏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26137356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档