ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Python - breakpointを用いてデバッグする

初めに

 Pythonでは、breakpoint()を用いてプログラムの実行を一時停止し、デバッガを起動することができます。本記事はbreakpoint()について、まとめます。

breakpoint()とは

 Python 3.7以降で導入された組み込み関数です。デバッグを行う際に、プログラムの実行を一時停止し、デバッガに制御を渡すことができます。

使い方

 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()は消しておきましょう。そこで処理が中断してしまいます