#
5 デバッグ版ビルド (Debugging Builds)

インタプリタと拡張モジュールに対しての追加チェックをするためのいくつかの マクロを有効にしてPythonをビルドすることができます。 これらのチェックは、実行時に大きなオーバーヘッドを生じる傾向があります。 なので、デフォルトでは有効にされていません。

Pythonデバッグ版ビルドの全ての種類のリストが、Pythonソース配布(source distribution)の中の Misc/SpecialBuilds.txt にあります。 参照カウントのトレース、メモリアロケータのデバッグ、インタプリタのメインループの 低レベルプロファイリングが利用可能です。よく使われるビルドについてのみ、 この節の残りの部分で説明します。

インタプリタを Py_DEBUG マクロを有効にしてコンパイルすると、 一般的に 「デバッグビルド」 といわれるPythonができます。 Unix では、 configure コマンドに --with-pydebug を追加することで、 Py_DEBUG が有効になります。 その場合、暗黙的にPython専用ではない _DEBUG も有効になります。 Unix ビルドでは、 Py_DEBUG が有効な場合、コンパイラの最適化が無効になります。

あとで説明する参照カウントデバッグの他に、以下の追加チェックも有効になります。

- object allocator に対する追加チェック
- パーサーとコンパイラに対する追加チェック
- 情報損失のために、大きい型から小さい型へのダウンキャストに対するチェック
- 辞書(dict)と集合(set)の実装に対する、いくつもの assertion の追加。 加えて、集合オブジェクトに `test_c_api` メソッドが追加されます。
- フレームを作成する時の、引数の健全性チェック。
- 初期化されていない数に対する参照を検出するために、長整数のストレージが 特定の妥当でないパターンで初期化されます。
- 低レベルトレースと追加例外チェックがVM runtimeに追加されます。
- メモリアリーナ(memory arena)の実装に対する追加チェック
- threadモジュールに対する追加デバッグ機能.

ここで言及されていない追加チェックもあるでしょう。

Py_TRACE_REFS を宣言すると、参照トレースが有効になります。 全ての `PyObject` に二つのフィールドを追加することで、 使用中のオブジェクトの循環二重連結リストが管理されます。 全ての割り当て(allocation)がトレースされます。 終了時に、全ての残っているオブジェクトが表示されます。 (インタラクティブモードでは、 インタプリタによる文の実行のたびに表示されます) Py_TRACE_REFS は Py_DEBUG によって暗黙的に有効になります。

より詳しい情報については、Pythonのソース配布(source distribution)の中の Misc/SpecialBuilds.txt を参照してください。