2

我编写了一个调试器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) 也用于内存分配。所以,我也会数那个。

4

1 回答 1

1

使用 gdb 的堆扩展。它会做你想做的事。如果您想以编程方式使用它,只需将结果通过管道传输到您的应用程序以进行后期处理:

https://fedorahosted.org/gdb-heap/

于 2013-05-30T17:49:18.413 回答