Python の breakpoint()

Pythonのbreakpoint()は、Python 3.7で導入された新しい組み込み関数です。Pythonのコードデバッグは、実際のコードとデバッグモジュールコードとの緊密な結合のため、常に困難なプロセスでした。たとえば、pdbデバッガを使用している場合、プログラムコードでpdb.set_trace()を呼び出す必要があります。他のデバッガを使用したい場合、たとえばweb-pdbの場合、PDB関連のすべてのコードを削除してweb_pdb.set_trace()メソッドを追加する必要があります。これにより、Pythonデバッガの使用には膨大なオーバーヘッドが発生し、Pythonコードのデバッグとメンテナンスが困難になります。そのため、Python 3.7では、疎結合なデバッグコードを書くためのbreakpoint()メソッドが導入されました。

Pythonのbreakpoint()

Pythonのbreakpoint()関数は、sys.breakpointhook()関数を呼び出します。デフォルトでは、sys.breakpointhook()はpdb.set_trace()関数を呼び出します。したがって、少なくともbreakpoint()を使用することで、デバッガの使用が便利になります。明示的にpdbモジュールをインポートする必要はありません。breakpoint()関数の使用例を見てみましょう。次のコードを含むpythonスクリプトpython_breakpoint_examples.pyがあります。

x = 10
y = 'Hi'
z = 'Hello'
print(y)

breakpoint()

print(z)

このスクリプトを実行すると、PDBデバッガコンソールが開きます。

$python3.7 python_breakpoint_examples.py
Hi
> /Users/pankaj/Documents/PycharmProjects/BasicPython/basic_examples/python_breakpoint_examples.py(8)()
-> print(z)
(Pdb) c
Hello
$

Pythonのbreakpoint() – デバッグを停止する

Pythonのsys.breakpointhook()関数は、デバッガを設定するための環境変数PYTHONBREAKPOINTを使用します。未設定の場合、デフォルトのPDBデバッガが使用されます。もし「0」に設定されている場合、関数は直ちに戻り、コードのデバッグは行われません。コードをデバッグせずに実行したい場合に非常に便利です。

$PYTHONBREAKPOINT=0 python3.7 python_breakpoint_examples.py
Hi
Hello
$

Pythonのbreakpoint() – デバッガモジュールの変更

PYTHONBREAKPOINT環境変数を使用して、breakpoint()関数が呼び出すデバッガメソッドを指定することができます。これは非常に便利です。コードの変更なしでデバッガモジュールを簡単に変更できます。たとえば、web-pdbデバッガを使用したい場合、PYTHONBREAKPOINT=web_pdb.set_traceとしてプログラムにフックすることができます。まず、web-pdbがインストールされていることを確認してください。インストールするには、pip3.7 install web-pdbコマンドを使用します。

web-pdbのドキュメントによると、Python 3.7で追加された新しいbreakpoint()関数と互換性があります。

$PYTHONBREAKPOINT=web_pdb.set_trace python3.7 python_breakpoint_examples.py
Hi
2018-08-10 12:49:54,339: root - web_console:110 - CRITICAL - Web-PDB: starting web-server on pankaj:5555...

コンソールログで提供されたWebサーバーのURLを開くと、以下の画像のようなデバッガーウィンドウが表示されます。このUIを使用してPDBコマンドを発行することができます。プログラムを続行し、完了するために「c」というコマンドを送信できます。

概要

Pythonのbreakpoint()関数は、Pythonのデバッグ機能に非常に役立つ追加機能です。これを使用してデバッグすることをおすすめします。これにより、他のサードパーティのデバッガーを簡単にフックすることができます。また、デバッガーを無効にしてプログラムを通常通り実行するオプションも提供されています。

さらにPythonの例は、GitHubリポジトリから確認することができます。

参考: 公式ドキュメント

Source:
https://www.digitalocean.com/community/tutorials/python-breakpoint