我已经使用ptrace(2)
编写了一个调试器,主要用于审计系统调用和重定向子进程的标准IO。我也想用这个调试器来检测内存泄漏。实现内存调试器
我认为这可能与统计对系统调用brk(2)
的引用一样容易,但事实并非如此。不幸的是(或者幸运的是),Linux似乎在程序结束时调用brk(2)
,无论内存是否被正确释放。
我已经看到了这个在调用malloc(3)
和free(3)
程序,并只是调用malloc(3)
程序 - 它们都具有的brk(2)
调用该程序已呼吁exit_group(2)
的时间,它等于计数发生在回报(也许是我可能会错误地解释这些结果?)。
或者,也许exit_group(2)
不等同于从主返回,我应该设置一个不同的中断点来审计brk(2)
的呼叫计数。
我发现了一个类似的问题here,但我仍然没有找到答案。
据我所知,Valgrind是一个完美的工具,但它会造成相当大的开销。
有没有人有检测到与ptrace(2)
内存泄漏有用的信息? ptrace(2)
可能吗?有没有更实用的方法?是否有内存调试子进程的API?
编辑:
如果有涉及与其他功能分配内存时,我就指望这些呢。在malloc的页面上,它表示mmap(2)也用于内存分配。所以,我也会这样。
BRK()不会被调用使用malloc。我相信这是为了给进程提供空间而被调用(aka,brk()是什么给你的进程地址空间)。我认为,malloc调用然后大块这个brked区域,这就是为什么你不能只计算呼叫brk()。 – Magn3s1um
只需注意 - 在进程终止时,OS释放进程的所有内存。这可能是你看到的最后的呼叫。所以你可能想在'exit_group()'之前寻找一个地方来检查这些调用。 –
@DanFego,我知道,我在我的问题中写道。 – tay10r