gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:12:12 25 4
gpt4 key购买 nike

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

我还听说运行各种内存泄漏检测实用程序会减慢我们无法承受的应用程序速度,因为它已经在接近 CPU 容量的情况下运行。

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

最佳答案

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

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

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

例如,如果 80% 的已分配 block 的长度为 31424 字节,您将寻找该范围的分配(给定或占用 16 字节,具体取决于内存分配器的工作方式)。

或者,如果它们都包含类似“2011-01-01 15:25:00 Beginning process 42”的字符串,您可能需要在日志库中查找泄漏。

无论如何,您都必须深入研究 C++ 运行时源代码以找出如何定位内存区域,然后使用该代码来遍历结构。

关于c++ - 有没有办法使用核心文件找到泄漏的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439170/

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