2017-06-13 89 views
1

没有valgrind,我怎么能找到在哪里分配了大块内存(例如malloc?)是否有可能为大内存分配设置gdb中断点?在C++中寻找大内存分配

我不能Valgrind的使用,因为一些依赖库禁止使用的valgrind的(将Valgrind的崩溃,因为它不承认其特殊的堆叠)

+0

[track C++ memory allocations]的可能重复(https://stackoverflow.com/questions/910172/track-c-memory-allocations) –

+0

就像我说的,我们禁止使用valgrind地块。 –

+3

跟踪内存分配的另一种方式是实现新的操作符并从该方法调用malloc。这就是我们要跟踪内存分配和重新分配情况。然后,该类应该是类的基类,以便在计划使用new运算符分配内存时调用该新运算符。 – Asesh

回答

0

共享库中介会做很好的工作。 Here是一个很好的文章,给出了你需要的完美例子。

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

中介层仅适用于共享(.so)库。静态(.a)库直接链接到可执行文件,并且调用不容易被拦截。 malloc系列通常是从Linux中的碎片库链接的,所以这不应该成为你的情况。

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