2

我已经尝试调试内存泄漏已经有一段时间了。我的主要问题是无法使用像 Valgrind 之类的适当工具,所以我选择了普通的 GDB + strace。

我的程序是一个循环。在每次迭代中,它都会创建一些对象,然后调用它们的析构函数。正如这里所解释,在循环的第一次迭代的第一次分配之后,程序不应该要求更多的内存,因为它总是分配相同的对象,因此应该总是重用相同的空间。然而,我的程序brk()每 15 次迭代调用一次,并且传递给的参数brk每次增加 4.096(例如,第 1 次:brk(0xb7887000) = 0xb7887000、第 2 次:brk(0xb7888000) = 0xb7888000、第 3 次:brk(0xb7889000) = 0xb7889000,等等)。

然后我尝试将 GDB 连接到我的程序,让程序运行几次迭代,并在 brk 上设置一个断点(gdb) break brk

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

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

4

0 回答 0