在C ++中查找大内存分配

时间:2017-06-13 03:42:39

标签: c++ memory memory-leaks gdb valgrind

如果没有valgrind,我怎样才能找到分配了大块内存的位置(例如malloc?)是否可以为大内存分配设置gdb断点?

我不能使用valgrind,因为一些依赖库禁止使用valgrind(因为它不能识别它的特殊堆栈会崩溃valgrind)

1 个答案:

答案 0 :(得分:0)

共享库插入器可以很好地完成工作。 Here是一篇优秀的文章,它提供了您需要的完美示例。

如果函数在共享库中,则可以指示运行时链接程序调用另一个“插入”函数。插入器可以完全取代功能,也可以增加功能。一个很好的例子是malloc系列函数。在您的情况下,您可以让插入器检查malloc大小并采取特殊操作。 gdb可用于在插入库本身中放置断点,因此您可以在特殊逻辑上放置断点以满足您的要求。

插入器仅适用于共享(.so)库。静态(.a)库直接链接到可执行文件,并且调用不容易被截获。 malloc系列通常从Linux中的分片库链接,因此在您的情况下这不应该是一个问题。

Linux的所有主要版本都支持使用LD_PRELOAD功能的插入器。