Python Pdbデバッグ

4560 ワード

Python PDBデバッグ
概要
単純なプログラムを開発する際には、Print()やlogを加えて補助プログラムのデバッグを行うことができるが、複雑なプログラムではこのようなデバッグ方式が困難になることが多いため、単一ステップでデバッグしたり、変数を簡単に表示したりする方法でプログラム問題の調査を行う必要がある.Linuxリリース版でvimを使用してC/C++を書き、gdbを使用してデバッグを行った人は、上手なpdbデバッグの機会がより容易になる可能性があります.もちろん、他の人もすぐにPythonのpdbデバッグを上手にすることができます.
基本コマンド
完全なコマンド
略記コマンド
説明
args
a
現在の関数のパラメータを印刷
break
b
ブレークポイントの設定
clear
cl
ブレークポイントのクリア
condition
なし
条件付きブレークポイントの設定
continue
cまたはcont
ブレークポイントが発生したか、スクリプトが終了したことを確認して実行を続行します.
disable
なし
ブレークポイントの無効化
enable
なし
ブレークポイントの有効化
help
h
pdbヘルプの表示
ignore
なし
ブレークポイントを無視
jump
j
指定した行数にジャンプして実行
list
l
スクリプト・リストのリスト
next
n
次の文を実行します.関数が内部に入らない場合
p
p
変数値を印刷するにはprintを使用します.
quit
q
pdbを終了
return
r
関数が戻るまで実行
tbreak
なし
一時的なブレークポイントを設定し、ブレークポイントは1回のみ中断します.
step
s
次の文を実行します.関数が内部に入ることに遭遇しました.
where
w
場所の表示
!
なし
pdbでの文の実行
デバッグ例
コード1:
utils.py
def add(a, b):
    return a + b + b - a

コード2:
import utils
import pdb

def call(a, b):
    pdb.set_trace()
    c = utils.add(a, b)
    print(c)

if __name__ == '__main__':
    call(3, 4)

コードは簡単ですが、ここで説明するキーは次のとおりです.
import pdb

pdb.set_trace()             #       ,           ,      

デバッグプロセス
D:\exercise\pdb>python36 main.py
> d:\exercise\pdb\main.py(6)call()
-> c = utils.add(a, b)
(Pdb) l
  1     import utils
  2     import pdb
  3
  4     def call(a, b):
  5         pdb.set_trace()
  6  ->     c = utils.add(a, b)
  7         print(c)
  8
  9     if __name__ == '__main__':
 10         call(3, 4)
[EOF]

bashでcall関数を呼び出すと、まずpdbで設定されたブレークポイントの次の行にとどまり、次のユーザーの入力を待つと入力nが単一ステップデバッグして次の行を実行します.
(Pdb) n
> d:\exercise\pdb\main.py(7)call()
-> print(c)

このときの変数を見たい場合は、pを使用してある変数の値を印刷できます.
(Pdb) n
> d:\exercise\pdb\main.py(7)call()
-> print(c)(Pdb) p c
7

途中で関数を終了bashにqを入力するだけでプログラムを終了できます
(Pdb) q
Traceback (most recent call last):
  File "main.py", line 10, in 
    call(3, 4)
  File "main.py", line 7, in call
    print(c)
  File "main.py", line 7, in call
    print(c)
  File "C:\Program Files\Python36\lib\bdb.py", line 51, in trace_dispatch
    return self.dispatch_line(frame)
  File "C:\Program Files\Python36\lib\bdb.py", line 70, in dispatch_line
    if self.quitting: raise BdbQuit
bdb.BdbQuit

基本的な過程は上述したように、もっと多くの知識はやはり皆さんが自分で探求しなければなりません.道は長いです.