8

我们一直在尝试寻找多线程 C++ 应用程序中的一些堆损坏问题。作为一种技术,我们尝试将 -lmcheck 添加到应用程序的库行。这导致应用程序在相对较短的时间内因明显的堆损坏而崩溃。

我们的应用确实同时使用了 malloc/free 和 new/delete(视情况而定)。

我们的一个团队想知道 -lmcheck 是否实际上是线程安全的,并在所有 malloc/free 调用周围放置了一个互斥锁。崩溃消失了。

有谁知道 -lmcheck 是否应该支持多线程?我想知道我们是否只是误解了我们正在尝试使用的工具,从而导致我们自己不必要的担心。

4

3 回答 3

8

不,mcheck 不是线程安全的,不应与多线程应用程序一起使用。这样做会引入额外的问题,因为线程之间没有同步。以下是 Ulrich Drepper(glibc 维护者)几个月前对该主题的回复:

mcheck 不适用于多线程代码。它不可能做到。使用 mcheck 底层技术无法解决此问题。

于 2008-11-24T18:22:45.773 回答
2

在我们花时间愚弄它之前,我应该检查一下。嗯嗯。

这是该报价来源的链接(我相信):

http://sourceware.org/bugzilla/show_bug.cgi?id=6547

glibc 文档缺陷:

http://sourceware.org/bugzilla/show_bug.cgi?id=12751

已打开以帮助避免其他人碰到此问题。

于 2008-11-24T18:32:51.493 回答
0

作为替代方案,我强烈推荐 valgrind - 它适用于多线程应用程序 - 尽管它模拟线程,但它本身实际上并不使用线程。

于 2009-07-15T14:43:15.450 回答