Guile 拡張モジュールのメモリ リークを確認するにはどうすればよいですか?
-
09-06-2019 - |
質問
C で書かれた Guile の拡張モジュールを開発しています。この拡張モジュールには Python インタープリターが組み込まれています。
この拡張モジュールは Python インタープリターを呼び出すため、Python オブジェクトが占有するメモリを適切に管理していることを確認する必要があります。
Python インタープリターは独自のメモリ処理で適切に動作していることがわかりました。そのため、他に干渉する要因がなければ、valgrind を実行することで、自分の Python インタープリター埋め込みコードのバグによるメモリ リークを見つけることができます。
ただし、valgrind で Guile を実行すると、valgrind はメモリ リークを報告します。このようなメモリ リークにより、私自身のコードによるメモリ リークがわかりにくくなります。
問題は、コードのバグによるメモリ リークと、valgrind によって Guile によるものとして報告されたメモリ リークを区別するにはどうすればよいかということです。valgrind の代わりに別のツールを使用しますか?特別なヴァルグリンドオプション?諦めて手動のコードウォークスルーに依存しますか?
解決
いくつかの選択肢があります。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