8

マルチスレッドの C++ アプリで発生するヒープ破損の問題を突き止めようとしています。1 つの手法として、アプリケーションの libraries 行に -lmcheck を追加してみました。これにより、比較的短い順序で明らかにヒープが破損してアプリがクラッシュします。

私たちのアプリは、(必要に応じて) malloc/free と new/delete の両方を使用します。

私たちのチームの 1 人は、-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 に答える