8

私は C で書かれた Guile の拡張モジュールを開発しています。この拡張モジュールには Python インタープリターが組み込まれています。

この拡張モジュールは Python インタープリターを呼び出すため、Python オブジェクトが占有するメモリが適切に管理されていることを確認する必要があります。

私は、Python インタープリターが独自のメモリ処理で適切に動作していることを発見しました。そのため、valgrind を実行することで、他に干渉要因がなければ、独自の Python インタープリター埋め込みコードのバグによるメモリ リークを見つけることができます。

しかし、valgrind の下で Guile を実行すると、valgrind がメモリ リークを報告します。このようなメモリ リークは、自分のコードによるメモリ リークを覆い隠します。

問題は、私のコードのバグによるメモリ リークを、valgrind によって報告された Guile によるメモリ リークと区別するにはどうすればよいかということです。valgrind の代わりに別のツールはありますか? 特別な valgrind オプション? あきらめて、手動のコード ウォークスルーに頼りますか?

4

1 に答える 1

7

いくつかのオプションがあります。1 つは、valgrind の抑制ファイルを作成して、作業していないもののレポートをオフにすることです。Python には次のようなファイルがあります。たとえば、 http ://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp です。

valgrind があなたのセットアップを気に入らない場合、別の可能性はlibmudflap;を使用することです。を使用してプログラムをコンパイルするgcc -fmudflap -lmudflapと、結果のコードがポインターのデバッグ用にインストルメント化されます。gcc のドキュメントとここで説明されています: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging

于 2008-09-17T01:38:24.580 に答える