Strace检测到对brk的调用,但GDB不会在断点

时间:2016-10-31 14:41:50

标签: debugging gdb breakpoints strace brk

我一直在尝试调试内存泄漏很长一段时间。我的主要问题是无法使用像Valgrind之类的正确工具,所以我选择了简单的GDB + strace。

我的程序是一个循环。在每次迭代中,它创建一些对象,然后调用它们的析构函数。正如它所解释的here,在循环的第一次迭代中第一次分配之后,程序不应该要求更多的内存,因为它总是分配相同的对象,因此应该总是重用相同的空间。然而,我的程序每15次迭代调用brk(),传递给brk的参数每次增加4.096(比如,第一次:{​​{1}},第二次:brk(0xb7887000) = 0xb7887000,第3次时间:brk(0xb7888000) = 0xb7888000,依此类推。)

然后我尝试将GDB连接到我的程序,让程序运行几次迭代,并使用brk(0xb7889000) = 0xb7889000在brk上设置断点。

它说它在一个地址上设置了一个断点,但即使我让我的程序运行超过15次迭代,断点也永远不会被“调用”(?)。

为什么会这样?我怎么能理解发生了什么?

0 个答案:

没有答案
相关问题