Pythonデバッガー(pdb)
ソフトウェア開発の専門用語では、「デバッグ」という用語は、プログラム内のエラーを見つけて修正するプロセスに広く使用されています。 Pythonの標準ライブラリには、Pythonプログラムをデバッグするためのユーティリティのセットであるpdbモジュールが含まれています。
デバッグ機能はPdbクラスで定義されています。このモジュールは、内部でbdbモジュールとcmdモジュールを使用します。
pdbモジュールには、非常に便利なコマンドラインインターフェイスがあります。これは、Pythonスクリプトの実行時に–m switch
を使用してインポートされます。python –m pdb script.py
デバッガーの動作について詳しく知るために、最初にPythonモジュール(fact.py)を次のように記述します-
def fact(x): f = 1 for i in range(1,x+1): print (i) f = f * i return f if __name__=="__main__": print ("factorial of 3=",fact(3))
コマンドラインからこのモジュールのデバッグを開始します。この場合、実行はコードの最初の行で停止します。その左側に矢印(->)を表示し、デバッガープロンプト(Pdb)を生成します
C:\python36>python -m pdb fact.py > c:\python36\fact.py(1)<module>() -> def fact(x): (Pdb)
すべてのデバッガコマンドのリストを表示するには、デバッガプロンプトの前に「help」と入力します。コマンドの詳細については、「help
listコマンドは、プログラムが停止した行の左側に->記号が付いたコード全体を一覧表示します。
(Pdb) list 1 -> def fact(x): 2 f = 1 3 for i in range(1,x+1): 4 print (i) 5 f = f * i 6 return f 7 if __name__=="__main__": 8 print ("factorial of 3 = ", fact(3))
プログラムを1行ずつ移動するには、ステップまたは次のコマンドを使用します。
(Pdb) step > c:\python36\fact.py(7)<module>() -> if __name__=="__main__": (Pdb) next > c:\python36\fact.py(8)<module>() -> print ("factorial of 3 = ", fact(3)) (Pdb) next 1 2 3 factorial of 3= 6 --Return-- > c:\python36\fact.py(8)<module>()->None -> print ("factorial of 3 = ", fact(3))
stepコマンドとnextコマンドの主な違いは、stepコマンドを使用すると、関数内でプログラムが停止し、nextコマンドが呼び出された関数を実行して、その後停止することです。
C:\python36>python -m pdb fact.py > c:\python36\fact.py(1)<module>() -> def fact(x): (Pdb) s > c:\python36\fact.py(7)<module>() -> if __name__=="__main__": (Pdb) n > c:\python36\fact.py(8)<module>() -> print ("factorial of 3=",fact(3)) (Pdb) s --Call-- > c:\python36\fact.py(1)fact() -> def fact(x): (Pdb) n > c:\python36\fact.py(2)fact() -> f = 1 (Pdb) n > c:\python36\fact.py(3)fact() -> for i in range(1,x+1): (Pdb) n > c:\python36\fact.py(4)fact() -> print (i) (Pdb) n 1 > c:\python36\fact.py(5)fact() -> f = f * i (Pdb) n > c:\python36\fact.py(3)fact() -> for i in range(1, x + 1): (Pdb) n > c:\python36\fact.py(4)fact() -> print (i) (Pdb) f,i (1, 2) (Pdb)
stepコマンドは、プログラムが関数の呼び出しに遭遇したときの--call—indicationと、関数が終了したときの--return---も表示します。いつでも、名前を入力するだけで特定の変数の値を確認できます。
breakコマンドでプログラム内にブレークポイントを設定できます。行番号(ブレークポイントを設定する場所)を指定する必要があります。たとえば、「break 5」は、現在のプログラムの5行目にブレークポイントを設定します。
(Pdb) list 2 f = 1 3 for i in range(1, x + 1): 4 print (i) 5 f = f * i 6 return f 7 -> if __name__=="__main__": 8 print ("factorial of 3=",fact(3)) [EOF] (Pdb) break 5 Breakpoint 1 at c:\python36\fact.py:5 (Pdb) continue 1 > c:\python36\fact.py(5)fact() -> f = f * i (Pdb) break Num Type Disp Enb Where 1 breakpoint keep yes at c:\python36\fact.py:5 breakpoint already hit 1 time (Pdb) continue 2 > c:\python36\fact.py(5)fact() -> f = f * i (Pdb) b Num Type Disp Enb Where 1 breakpoint keep yes at c:\python36\fact.py:5 breakpoint already hit 2 times
'continue'コマンドが発行されると、プログラムの実行はブレークポイントに到達するまで続行されます。すべてのブレークポイントを表示するには、行番号なしでbreakコマンドを発行するだけです。
ブレークポイントは、disable / enableコマンドで無効化/有効化するか、clearコマンドで完全にクリアすることができます。
(Pdb) disable 1 Disabled breakpoint 1 at c:\python36\fact.py:5 (Pdb) b Num Type Disp Enb Where 1 breakpoint keep no at c:\python36\fact.py:5 breakpoint already hit 2 times>
Pdbデバッガーは、Pythonスクリプト内からも使用できます。これを行うには、スクリプトの先頭にあるpdbをインポートし、プログラム内でset_trace()メソッドを使用します。
import pdb def fact(x): f = 1 for i in range(1,x+1): pdb.set_trace() print (i) f = f * i return f if __name__=="__main__": print ("factorial of 3=",fact(3))
デバッガーの動作は、コマンドライン環境で見られるものとまったく同じです。
-
JavaScriptのデバッガーステートメント
JavaScriptのデバッガーステートメントは、コードにブレークポイントを設定するために使用されます。コードは、デバッガーステートメントに遭遇するとすぐに実行を停止し、デバッガー関数(使用可能な場合)を呼び出します。 以下は、JavaScriptでデバッガステートメントを実装するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" co
-
Pythonでのリストの内部動作
このチュートリアルでは、Python3.xでのリストの内部動作について学習します。またはそれ以前。また、各ステップでpythonステートメントを作成するときに、オブジェクトとフレームの形成についても見ていきます。 リストの初期化:これは、いくつかの要素を含むリストを作成していることを意味します。 >>> lis=[1,2,3,4] ここで、リスト変数は、上記のようにリストオブジェクトを参照しているグローバルフレームで宣言されています 次に、リストに要素を追加したときに何が起こったかを見てみましょう。 >>> lis.append(8) こ