Git   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了检测出口处释放的C内存“泄漏”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

假设我有一个C程序(在Linux下运行),它处理许多数据结构,一些复杂的,其中一些可以增长和缩小,但不应该随着时间的推移而增长。 据观察,随着时间的推移,程序的RSS逐渐增加(比内存碎片更能解释)。 我想find什么是泄漏。 在valgrind下运行是明显的build议,但是valgrind (with --leak-check=full和--show-reachables=yes )显示没有泄漏。 我相信这是因为数据结构本身在退出时正确地被释放,但其中一个在程序的生命周期中正在增长。 例如,可能有一个链接列表随着时间的推移正在线性增长,有人忘记删除列表上的资源,但退出清理正确释放列表中退出的所有项目。 有一个哲学问题,当然这些问题实际上是“泄漏”,当然是问题中的引号。

有没有什么有用的工具来tesTing这个? 我所喜欢的是能够在valgrind下运行,并且能够产生一个当前分配的报告,就像在退出时一样,但是要在一个信号上发生,并让程序继续下去。 然后,我可以查找哪些堆栈跟踪签名对他们有越来越多的分配。

我可以可靠地从gdb使用generate-core-file获得一个很好的“核心” generate-core-file ; 是否有一些方法来分析脱机,如果说我编写了一个便的malloc()debugging库malloc() ?

我可以完全访问源代码,并且可以对其进行修改,但是我并不是真的想手动tesTing每个数据结构,而且我对这个问题的一般解决scheR_577_11845@e感兴趣(比如valgrind提供的),而不是如何解决这个特殊的问题。

Linux C ++编译器(和链接器)如何决定在哪里放置typeinfo?

在内核空间中,如何获得与ext4格式磁盘上的文件对应的物理地址

如何使USB设备启用多点触摸?

clock_gettime()每50-100毫秒返回1-2ms的不准确性(Debian在VirtualBox上运行)

如何禁用全屏独占模式?

在这里寻找类似的问题,但他们似乎都是:

为什么我的程序泄漏内存?

如何检测退出时的内存泄漏? (对我没用)

如何检测核心文件的内存泄漏? (很好,但没有一个满意的答案)

如果我在Solaris下运行,我猜测答案是'使用这个便的dtrace脚本'。

静态链接的C ++二进制工作在每个系统具有相同的架构?

WPF保持父窗口和子窗口上的窗口边界焦点

如何在打开的pipe理员程序中调用system()并赋予它相同的权限?

使用WebProxy的httpWebrequests工作,然后在一段时间后失败

最好的方法来有效地暂停执行c

Valgrind包含一个gdbserver。 这基本上意味着你可以使用gdb连接到它,例如发出泄漏转储,或者在运行时显示所有可访问的内存。 当然,你必须判断是否存在“内存泄漏”,因为valgrind无法知道在应用程序逻辑中是否存在未能释放内存的错误,但是仍然引用它。

用–vgdb = yes标志运行valgrind,然后运行命令:

valgrind --vgdb=yes --leak-check=full --show-reachable=yes ./yourprogram gdb ./yourprogram (gdb) target remote | vgdb (gdb) monitor leak_check full reachable any

有关更多信息,请参阅文档, 这里和这里

您也可以在程序中以编程方式执行此操作

#include <valgrind/memcheck.h>

并在代码中的适当位置做:

VALGRIND_DO_LEAK_checK;

(也会显示可达内存的iirc,只要valgrind运行–show-reachable = yes

Valgrind Massif工具可以显示应用程序的一般内存使用情况,而不仅仅是泄露内存。 它通过调用函数及其后退来分解malloc()和free() ,所以你可以看到哪些函数在不释放的情况下分配内存。 这可能是一个很好的找到你所提到的类型泄漏的工具。

不幸的是,Massif周围的工具ms_print … Valgrind提供的ms_print工具只对最基本的任务有用; 对于真正的工作,你可能想要显示一个图形的东西。 网上有几种工具可以使用 – 例如, Valgrind Massif工具输出图形界面? 。

大佬总结

以上是大佬教程为你收集整理的检测出口处释放的C内存“泄漏”全部内容,希望文章能够帮你解决检测出口处释放的C内存“泄漏”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: