调试堆/ STL调试等效于GCC?

时间:2009-07-24 12:51:37

标签: c++ debugging gcc

我计划更多地使用GCC(Linux和Windows),我想知道是否有相当于GCC CRT和STL的MSVC debug heap STL checks

我已经了解Valgrind等工具,但我正在寻找库中的内容。

5 个答案:

答案 0 :(得分:7)

我对调试堆和STL检查不太熟悉,但是当我在Linux上的GCC中遇到内存问题时,我使用了一个名为MALLOC_CHECK_的环境变量(来自malloc(3)):

  

最新版本的Linux libc(晚于5.4.23)和GNU libc(2.x)包含一个       malloc实现,可通过环境变量进行调整。什么时候       设置MALLOC_CHECK_,使用特殊(效率较低)的实现       旨在容忍简单的错误,例如free()的双重调用       使用相同的参数,或超出单个字节(逐个错误)。不是全部       但是,可以防止此类错误,并且可能导致内存泄漏。如果       MALLOC_CHECK_设置为0,任何检测到的堆损坏都会被静默忽略;如果       设置为1,在stderr上打印诊断;如果设置为2,则调用abort()       立即。这可能很有用,因为否则可能会发生崩溃       之后,问题的真正原因很难追查。

还有电围栏,一旦发生超限/欠载,就可以帮助捕捉缓冲区溢出中止。有关详细信息,请参阅libefence(3)

答案 1 :(得分:3)

http://sourceforge.net/projects/stlport/标准库的STLport版本有一个调试模式,我曾经使用过,这是Scott Meyers在Effective STL中推荐的。我现在已经好几年没用过了,所以我不能保证目前的状态。

还有一个关于GCC STL调试的帖子here,但我再一次无法保证它提供的信息。

答案 2 :(得分:3)

使用efence / DUMA进行一些堆调试(即使在MinGW下)

答案 3 :(得分:2)

我从来没有使用过它们,但我知道glibc有一些调试动态分配内存的功能。这是相关的手册条目http://www.gnu.org/s/libc/manual/html_node/Memory-Allocation.html#Memory-Allocation。 “无约束分配”有关于挂钩分配函数的各种方法的一些信息,“分配调试”包含有关glibc无法跟踪分配的一些信息。

就个人而言,我认为Valgrind是最简单的方法。

答案 4 :(得分:2)

在包含任何标准库之前,可以通过定义_GLIBCXX_DEBUG来启用您要​​查找的内容。如果你不能持续使用它,我不确定会有什么影响。我的默认建议是要非常小心。此外,我听说调试检查可能是一个很大的性能影响。如此之大以至于始终为调试版本启用它可能是不明智的。