4

プログラムのメモリ リークをチェックする方法は多数あります。リークしたメモリ ブロックへのポインターのリストが表示されますが、各ブロックの詳細情報を見つける良い方法はありますか? 例: オブジェクトが文字列であることがわかっている場合、実際の文字列値により、リークを簡単に見つけることができます。

それを可能にする RTTI へのバックドアはありますか?

解決すべき問題は、ポインターを取得するまでにランタイム システムが既にシャットダウン状態にあり、オブジェクトへのポインターではなく生のメモリ ブロック ポインターを取得することです (ただし、多くの場合は同じである可能性があります)。

4

3 に答える 3

7

RTTI は役に立たないかもしれません。RTTI は、クラスに仮想メソッドがある場合にのみ機能し、すべての割り当てが仮想メソッドを持つオブジェクトであるとは限りません。

本当に必要なのは、割り当てにスタック トレースを添付する何らかの方法を用意することです。次に、メモリが割り当てられた場所に関する情報を取得できます。メモリ リークしたオブジェクトの場合は、クラス コンストラクターを探します。

ところで、こんなのありますか?はい。Windows 用の無料ライブラリはVisual Leak Detectorです。より完全な機能を備えた商用製品 (Bounds Checker や IBM の Rational Purify など) もありますが、VLD はうまく機能します。メモリリークを見つけるのに何度も助けられました。

于 2008-12-09T08:15:48.643 に答える
6

valgrind --leak-check = fullを使用します。これにより、リークされたすべてのブロックの割り当てサイトのスタックトレースが得られます。この情報は、単に情報を入力するよりもはるかに便利です valgrind(「Valgrinned」のように発音されます)は揺れます

于 2008-12-09T08:17:58.047 に答える
1

ノーマンのように、私はvalgrindを支持します。スタックトレースを分析するための本当に良いアドバイスです!

KDevelopでビルドして使用しています。

于 2008-12-09T12:27:08.213 に答える