そのため、いくつかの Python C 拡張機能をまとめました。それぞれの動作は確認されていますが、refcount デバッグによってこれを確認したいと思います。
INC/DEC 参照カウントを正しく挿入したことを確認するにはどうすればよいですか? この検証をブラック ボックスの観点から行いたいと考えています。つまり、すべての参照カウントが適切に行われた場合、関数の入力/出力/メモリはどのように見えるか?
私の最初のアプローチは、sys.getrefcount(obj) を使用し、すべての入力/出力オブジェクトの参照カウントをチェックして、問題がないことを確認することです。次に、使用されているメモリをチェックして、メモリ リークがないことを確認することもできます。
しかし、私はこれまで実際にこれを行ったことがないので、これを行う最も簡単で最も正しい方法は何ですか?
注: 私は Cython スタイルのライブラリを使用したくありません。基礎を学ぶために C の核心を自分でやりたいと思っています。
解決策:提案されたように、デバッグ対応のPythonインタープリターを構築しました。ややこしいかなと思ったけどそうでもなかった。このレシピに従って、それらの正確な行をObjects/object.c
. その後、ダウンロードした Python ソース ディレクトリで行う必要があったのは、次のとおりです。
./configure --with-pydebug --prefix=/usr/local/python/
make
make install
この新しいインタープリターへの C 拡張機能のビルドに関しては、その前に行う必要があったのinclude_dirs
は、拡張機能のタグを にポイントsetup.py
し'/usr/local/python/include/python2.7'
、新しいインタープリターでビルドおよびインストール コマンドを実行することだけでした。それが完了したら、c コードに行を追加するだけ_Py_CountReferences(stderr);
で、refcount が stderr (コンソール) にダンプされます。何が refcount を変更するのか、コードの進行に応じてどのように増減するのかを確認するのは非常に良いことです。