2012-11-26 23 views
0

我想用存储器调试器的功能(只是泄漏检测)来扩展现有的工具。带ptrace的内存调试器

我知道一些内存调试器通过替换malloc/free并跟踪什么是待解脱和谁分配它的工作;或者通过在虚拟机的种类上运行进程并监视内存访问。

我想知道,如果是有意义的使用ptrace()上设置的malloc /免费断点,而不是与dmalloc例如重建,并在一个单独的进程监控分配。它会太慢吗?其他工具是否以这种方式工作?

+3

我没有看到任何理由,你不能这样做(只是为了检漏),但我质疑这是否值得除了作为一个练习。内存调试很难做好,而且valgrind很难打败,除非你有特殊的需求,其性能是令人望而却步的。此外,“泄漏检测”通常是一个破碎的习惯用法;它会发现所有非问题泄漏(在退出前没有释放的东西),但找不到任何有问题的泄漏(即使它们不再被使用,其生命周期永远不会结束的分配)。 –

+0

@尼克,我目前正在做同样的事情,但我有问题在操作系统释放他们退出之前捕获泄漏。你有没有取得任何进展? – tay10r

+0

@TaylorFlores发现虽然它的工作原理并不是最好的方法,但在大量使用'malloc/free'的情况下,由于所有的上下文切换,它会增加大量的延迟。我建议使用钩子代替,这里是一个简单的教程http://www.linuxforu.com/2011/08/lets-hook-a-library-function/ – imreal

回答

0

这是不实际的使用调试器和陷阱的malloc /免费通话的几个原因:

  1. 从一个进程切换到另一个开销仅仅是伟大的平凡的程序。

  2. 您最终花费的存储空间类似于存储所有权信息的数量。 (这是我真正想要改进的)

  3. 有相当多的函数可用于堆,并且可能很容易错过一些。