有没有办法使用核心文件找到泄漏的内存?

Mat*_*ith 9 c++ linux memory-leaks elf

我有一个内存泄漏的应用程序的核心转储.我已经使用strings命令和xdd来检查文件,并且我已经了解了程序的哪个部分可能导致泄漏的一些想法.我可以使用应用程序在gdb中运行核心文件,但是我不能用它做很多测试,因为它是一个嵌入式应用程序,有很多复杂的基于时间的I/O,我无法在办公室模拟.

我还听说运行各种内存泄漏检测实用程序会降低我们无法负担的应用程序,因为它已经在接近CPU容量运行.

所以我现在所拥有的只是这个核心文件.我正在寻找的示例:是否有一个指针表我可以检查以找到已分配的内存,然后我可以使用它来尝试找到本应该已被释放但尚未被释放的内容?

pax*_*blo 10

不是很容易,没有.泄露内存的全部意义在于它分配的内存不再具有对它的引用.

您必须遍历整个内存区域以获取所有已分配块的列表,然后检查可能指向它的每个可能的变量/内存位置(几乎肯定有一些误报).

获取有关已分配块的一些统计信息可能值得一试.假设您的内存泄漏导致内存不足问题,大多数块将根据可能的大小或内容而具有特定类型.

例如,如果80%的已分配块长度为31424字节,那么您将寻找该范围的分配(给予或取16个字节,具体取决于内存分配器的工作方式).

或者,如果它们都包含类似"2011-01-01 15:25:00 Beginning process 42"的字符串,您可能希望在日志记录库中查找泄漏.

在任何情况下,您都必须深入了解C++运行时源代码以了解如何定位内存竞技场,然后使用该代码来遍历结构.