在没有任何工具的情况下调试内存泄漏问题[英] Debugging memory leak issues without any tool

本文是小编为大家收集整理的关于在没有任何工具的情况下调试内存泄漏问题的处理方法,想解了在没有任何工具的情况下调试内存泄漏问题的问题怎么解决?在没有任何工具的情况下调试内存泄漏问题问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

访调员 - 如果您没有工具可以检查如何检测内存泄漏问题?

答案 - 我将阅读代码,看看我分配的所有内存是否已被代码本身释放.

访调员不满意.还有其他方法吗?

推荐答案

对于下面定义的所有实现,需要为malloc()&free()函数编写包装器.

  1. 要保持简单,请跟踪Malloc()&Free()的计数.如果不相等,则您有内存泄漏.

  2. 一个更好的版本是跟踪地址malloc()'ed&free()'ed以这种方式确定哪些地址为malloc()'ed and ed not free()'ed.但这再次,也不会有太大帮助,因为您无法将地址与源代码联系起来,尤其是当您拥有大型源代码时,这将成为一个挑战.

  3. 因此,您可以在这里添加更多功能.例如,我为FreeBSD内核编写了类似的工具,您可以修改malloc()调用以存储模块/文件信息(给每个模块/文件一个no,您可以在某些标题中#define),<函数调用的C3>导致此malloc()并将其存储在数据结构中,每当调用malloc()或free()时,将其存储在数据结构中.使用malloc()返回的地址与free()匹配.因此,当他们的内存泄漏时,您就有有关哪些地址不是free()'ed的信息,在哪个文件中,(通过stack trace)将确切的函数(通过stack trace)固定为钉子.

    <

的方式,此工具的工作是在崩溃中,我曾经得到一个核心降低.我在内核内存空间中定义了全球(我正在收集数据的数据结构),我可以使用gdb访问并检索信息.

.

编辑:

最近,当调试Linux内核中的模因泄漏时,我遇到了这个称为kmemleak的工具,该工具在上面的第3点中描述了我所描述的类似算法.在此处阅读Basic Algorithm部分:文档/kmemleak.txt

其他推荐答案

我必须为真实做到这一点时,我的响应是 build 工具...一个调试堆层,包裹在c堆上,宏和宏切换代码以与这些代码相反呼叫而不是直接访问普通堆库.该层包含一些围栏逻辑以检测数组范围,一些仪器以监视堆在做什么,可选地确切地记录了谁分配和释放了每个块...

当然,另一种方法是"分裂和征服".构建单元测试以尝试缩小哪些操作导致泄漏,然后进一步细分该代码.

根据"无工具"的含义,核心转储有时也很有用.看到堆的内容可能会告诉您正在泄漏的内容.

等等....

本文地址:https://www.itbaoku.cn/post/359131.html