我编写了一个调试器ptrace(2)
,主要用于审计系统调用和重定向子进程的标准 IO。我还想使用此调试器检测内存泄漏。
我认为这可能就像计算对系统调用的引用一样简单brk(2)
,但事实并非如此。不幸的是(或幸运的是),Linux 似乎brk(2)
在程序结束时调用,无论内存是否被正确释放。
我在一个调用的程序和一个只调用的程序中看到了这一点——在程序malloc(3)
调用free(3)
时malloc(3)
它们都有相同的调用次数brk(2)
,exit_group(2)
这发生在返回时(也许我可能错误地解释了这些结果?)。
或者,也许exit_group(2)
不等同于从 main 'return',我应该设置一个不同的断点来审核brk(2)
.
我在这里找到了一个类似的问题,但我仍然没有找到答案。
我知道 Valgrind 是一个完美的工具,但它会导致相当大的开销。
有没有人有关于检测内存泄漏的有用信息ptrace(2)
?有可能ptrace(2)
吗?有没有更实用的方法?是否有用于内存调试子进程的 API?
编辑:
如果还有其他与分配内存有关的功能,我也会计算这些功能。在malloc的页面上,它说 mmap(2) 也用于内存分配。所以,我也会数那个。