24

次のパラメーターを使用してValgrindを実行します。

--leak-check=full --show-reachable=yes --leak-resolution=high --num-callers=100 --trace-children=yes

メモリ リーク ログに、メインまでの完全なスタック トレースを含むいくつかのエラー メッセージが表示されますが、一部のメッセージは次のようになります。

==3956== 1,999,140 (68,796 direct, 1,930,344 indirect) bytes in 5,733 blocks are definitely lost in loss record 8,842 of 8,845
==3956==    at 0x4022AB8: malloc (vg_replace_malloc.c:207)
==3956== 

これらのエラーの完全なスタック トレースを取得するにはどうすればよいですか?

4

1 に答える 1

24

完全なスタック トレースを取得するには、リークに関係している可能性がある (および によって設定された制限内にある--num-callers) すべてのライブラリ/実行可能ファイルのデバッグ シンボルが必要です。

それらのいずれかを自分でビルドする場合は-g、gcc でフラグを指定する必要があります (または他のコンパイラで関連するフラグを指定する必要があります)。

は万能ではなく、リークを見逃したり、完全なスタック トレースを提供できない場合があることに注意してください(特にスレッドや複雑なclass実装を使用している場合)。

デバッグ情報がないライブラリの場合、スタック トレースはそのライブラリで停止します。

無料のツールの場合、はその機能が非常に優れていますが、IBM のような場所がメモリ プロファイルを大金で販売できるのには理由があります。

于 2014-08-14T05:03:14.700 に答える