我已经尝试调试内存泄漏相当长一段时间了。我的主要问题是无法使用像 Valgrind 之类的正确工具,所以我选择了普通的 GDB + strace。
我的程序是一个循环。在每次迭代中,它都会创建一些对象,然后调用它们的析构函数。正如它所解释的here https://www.google.com/amp/s/deathandthepenguinblog.wordpress.com/2015/08/15/poor-mans-memory-leak-detection-with-strace/amp/,在循环的第一次迭代的第一次分配之后,程序不应该要求更多的内存,因为它总是分配相同的对象,因此应该总是重用相同的空间。然而我的程序调用brk()
每 15 次迭代,参数传递给brk
每次增加 4.096(例如,第一次:brk(0xb7887000) = 0xb7887000
,第二次:brk(0xb7888000) = 0xb7888000
,第三次:brk(0xb7889000) = 0xb7889000
, 等等)。
然后我尝试将 GDB 连接到我的程序,让程序运行几次迭代,并在 brk 上设置一个断点(gdb) break brk
.
它说它在一个地址上设置了一个断点,但即使我让我的程序运行超过 15 次迭代,该断点也永远不会被“调用”(?)。
为什么会发生这种情况?我怎样才能理解发生了什么事?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)