Python - breakpointを用いてデバッグする
初めに
Pythonでは、breakpoint()を用いてプログラムの実行を一時停止し、デバッガを起動することができます。本記事はbreakpoint()について、まとめます。
使い方
breakpoint()
と追加した部分でプログラムの実行が一時停止され、デバッガが起動します。
(サンプル)
def my_function(): x = 1 breakpoint() y = 2 print(x + y) my_function()
上のコードを実行すると、TERMINALに次のように表示されます。
breakpoint_sample.py(4)my_function()
の部分に現在、実行が停止されているファイル名、行数、関数名が表示されています。現在、breakpoint()
は3行目に記述されているため、その1行下の4行目で停止されています。
Pdbとは、Pythonデバッガのことです。このデバッガが起動されている状態で次のようなコマンドを入力することで様々な操作をすることができます。
Documented commands (type help <topic>): ======================================== EOF c d h list q rv undisplay a cl debug help ll quit s unt alias clear disable ignore longlist r source until args commands display interact n restart step up b condition down j next return tbreak w break cont enable jump p retval u whatis bt continue exit l pp run unalias where
主なコマンド
コマンド | 説明 |
---|---|
p(print) | 引数に指定した値を出力する |
a(args) | 現在の関数で使用している引数一覧を出力する。 |
l(list) | 現在のソースコードの前後の行を表示する。 |
c(continue) | 次のbreakpoint() まで処理を進める。 |
s(step) | 現在の行を実行し、次の行に進む。次の行が関数の場合、関数内に入って停止する。次の行が関数でない場合は、現在の関数の次の行で停止する。 |
n(next) | 現在の行を実行し、次の行に進む。次の行が関数の場合でも関数内には入らない。 |
r(return) | 現在の関数が返るまで実行する。 |
j(jump) | 次に実行する行を指定できる。ただし、for文の中などは入れないなどの制限あり。 |
q(quit) | デバッグを終了する。 |
h(help) | コマンド一覧を表示します。 |
使い終わったら
breakpoint()
を使って、処理の途中の状況を知ることで修正が必要な個所が分かったら、breakpoint()
は消しておきましょう。そこで処理が中断してしまいます