Python拡張機能がC++クラスに実装されています。valgrindを実行するためのC++ターゲットがありません。メモリチェックにvalgrindを使用したいと思います。
Pythonでvalgrindを使用できますか?
はい、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を抑制するだけで表示されます。
Python 2.7および3.2では、--with-valgrind
コンパイル時フラグPythonインタープリターがvalgrindで実行されていることを検出し、PyMallocを無効にします。これにより、PyMallocはメモリを割り当てるだけなので、メモリ割り当てをより正確に監視できます。大きな塊で。
はい、できます:あなたdoはvalgrindを実行するターゲットを持っています-それはpythonインタープリター自体です:
valgrind python foo.py
ただし、上記の結果はあまり満足のいくものではない可能性があります-Pythonはoptモードで、特別なmallocを使用して構築されているため、誤検知に陥る可能性があります。
最初にPythonのデバッグバージョンをビルドすると、より良い結果が得られる可能性があります。開始 ここ 。