Cou氏の徒然日記

ほのぼの日記ブログです。

Python3の学習 その21 (pdb:pythonデバッグ)

Python

今回はpdbについて。

Pythonソースをデバッグするには、pdbモジュールを使えばよいようです。

(Cのgdbと同じような感じですね)

 

pdbモジュール

まずは今回テストする関数を作成。

pdb_test.py に add_two_nums (2つの変数の和を返す) 関数を作成。

def add_two_nums(a, b):
    breakpoint()
    c = a + b
    return c

n = add_two_nums(2, 5)
print(n) 

テストする関数に breakpoint() を追加。

これで実行すれば自動的にデバッグモードに入ります。

coublood@penguin:~/python$ python3 pdb_test.py 
> /home/coublood/python/pdb_test.py(3)add_two_nums()
-> c = a + b
(Pdb) 

 

何が使えるかは「h」(help) を実行することでどんなコマンドがあるかは確認可能。

(Pdb) h

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    

Miscellaneous help topics:
==========================
exec  pdb

…とはいえ、何を実行していいかはわからないので、それはマニュアル等で確認が必要です。

coublood@penguin:~/python$ python3 pdb_test.py 
> /home/coublood/python/pdb_test.py(3)add_two_nums()
-> c = a + b
(Pdb) w
  /home/coublood/python/pdb_test.py(6)<module>()
-> n = add_two_nums(2, 5)
> /home/coublood/python/pdb_test.py(3)add_two_nums()
-> c = a + b
(Pdb) pp a
2
(Pdb) pp b
5
(Pdb) pp c
*** NameError: name 'c' is not defined
(Pdb) n
> /home/coublood/python/pdb_test.py(4)add_two_nums()
-> return c
(Pdb) pp c
7
(Pdb) c
7

コマンドを覚えておけば、色々と確認するのもある程度容易になるので、覚えておくと便利ですね。