2008-12-09 58 views
4

有许多方法可以检查程序是否存在内存泄漏。你最终得到泄露内存块的指针列表,但是有没有一种方法可以找出每个块的更多信息?例如:如果我知道该对象是一个字符串,那么实际的字符串值可以使查找泄漏变得更容易。在C++中查找未知对象的类型

RTTI中是否存在一个后门,使其成为可能?

需要解决的问题是,当你得到指针时,运行时系统已经处于关闭状态,你会得到原始的内存块指针而不是指向对象的指针(虽然在很多情况下可能是相同的) 。

回答

6

RTTI可能无法帮到你。 RTTI仅适用于类具有虚拟方法,并非所有分配都是具有虚拟方法的对象。

你真正需要做的是有一些方法来将堆栈跟踪附加到你的分配。然后你可以得到关于内存分配的信息。如果它是泄露内存的对象,你会寻找一个类构造函数。

无论如何,有没有这样的东西呢?是。免费的Windows库是Visual Leak Detector。还有更多全功能的商业产品(比如Bounds Checker和IBM的Rational Purify),但VLD非常棒。它帮助我无数次地发现内存泄漏。

5

我使用valgrind --leak-check = full,这会给我一个堆栈跟踪每个泄漏块的分配站点。这种信息是方式比只是类型信息更有用。 valgrind(像“瓦尔咧嘴笑”发音)岩石

0

像诺曼我主张valgrind。 这对于分析堆栈跟踪是一个很好的建议!

我使用它构建在KDevelop中。