web-dev-qa-db-ja.com

Python C ++拡張機能でvalgrindを使用するにはどうすればよいですか?

Python拡張機能がC++クラスに実装されています。valgrindを実行するためのC++ターゲットがありません。メモリチェックにvalgrindを使用したいと思います。

Pythonでvalgrindを使用できますか?

34
neuron

はい、Pythonでvalgrindを使用できます。 Python開発者が提供するvalgrind抑制ファイルを使用するだけでよいので、Pythonのカスタムメモリ割り当て/再割り当て関数による大量の誤検知は発生しません。

Valgrind抑制ファイルはここにあります: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

重要:抑制ファイル*のPyObject_FreeとPyObject_Reallocの行のコメントを解除する必要があります。

推奨される使用構文は次のとおりです。

$ valgrind --tool=memcheck --suppressions=valgrind-python.supp \
                                          python -E -tt ./my_python_script.py

README valgrindでのさまざまな使用方法を説明するPython SVNリポジトリからのこのPythonファイル:- http://svn.python.org/projects/python/trunk/Misc/README.valgrind

*-または、PyMallocを無効にしてPythonを再コンパイルできます。これにより、より多くのメモリリークをキャッチできます。 PyMallocを抑制するだけで表示されます。

44

Python 2.7および3.2では、--with-valgrindコンパイル時フラグPythonインタープリターがvalgrindで実行されていることを検出し、PyMallocを無効にします。これにより、PyMallocはメモリを割り当てるだけなので、メモリ割り当てをより正確に監視できます。大きな塊で。

8
Kamil Kisiel

はい、できます:あなたdoはvalgrindを実行するターゲットを持っています-それはpythonインタープリター自体です:

valgrind python foo.py

ただし、上記の結果はあまり満足のいくものではない可能性があります-Pythonはoptモードで、特別なmallocを使用して構築されているため、誤検知に陥る可能性があります。

最初にPythonのデバッグバージョンをビルドすると、より良い結果が得られる可能性があります。開始 ここ

0