Python Debugger:デバッグ スキルを簡単に改善
私たちの多くにとって、Python コードのデバッグは、結果的に print ステートメントを追加し、出力に基づいて何が起こっているかを判断しようとします。理想的ではありませんが、何らかの理由で、人々は Python デバッガーに触れたくないだけです。
目次
print を使用してコードをデバッグする
あなたが print
を使用している場合 デバッグのために、私はあなたを判断していません . Pythonを学ぶのは難しいです。プログラミングは難しい。人生は難しいです。すでに苦労している場合、さらに別のことを学ぶのは面倒に思えることを理解しています.そして、その print ステートメントをコードに追加する…簡単です。ちょっとした告白:私もいつもそうしています。一部の人が考えるほど悪くはありません。
そうは言っても、コードに print ステートメントを追加するのと同じくらい簡単なちょっとしたトリックをお教えします。ただし、このトリックにより無限のデバッグ機能が得られ、必要に応じて世界を征服することができます。
Python デバッガー ブレークポイントの設定
コードを適切にデバッグするのに IDE は必要ありません。このトリックは、最も単純なエディターでも、Jupyter Notebook でも常に機能します。
秘訣は次のとおりです。命令 breakpoint()
を使用して、いわゆるブレークポイントを設定します。 .使用しているエディターや IDE に関係なく、コード内の厄介な print ステートメントを通常挿入する場所に挿入できます。
では、そうするとどうなるでしょうか。確認してみましょう!以下のような簡単なプログラムを作成してください:
def add_two(x): return x + 2 for i in range(1, 10): a = add_two(i) breakpoint() print(a)
これを実行すると、REPL、コマンドライン、または IDE のいずれで実行しても、PDB と呼ばれる Python デバッガーにドロップされます。しかし、今は何ですか?
Python デバッガーの使用
上記の小さなプログラムを開始すると、次のようになります。
$ python3 breakpointing.py > /home/erik/breakpointing.py(7)<module>() -> print(a) (Pdb)_
ここで確認すべき点がいくつかあります:
- 開始された現在のファイルを示します (
breakpointing.py
) - その後、実行しようとしていた次のコマンドが表示されますが、
breakpoint()
の呼び出しによって中断されました。 . - 最後に、入力を待つ pdb プロンプトが表示されます。
Python デバッガーは、REPL と同様に、実際には完全に機能する Python シェルです。
この時点で、現在の環境を調べることができます。 a
の値を見てみましょう 今です:
(Pdb) print(a) 3 (Pdb) print(i) 1
print の代わりに、次のように pdb 固有のコマンド p を使用することもできます:
(Pdb) p a 3 (Pdb_ p i 1
次の行を実行しています
では、次のコード行を実行したい場合はどうすればよいでしょうか? 2 つのオプションがあります:
s
で またはstep
、現在の行を実行します。その後、デバッガは最初に停止する可能性があります。n
で またはnext
、現在の行も実行しますが、デバッガーは現在の関数の次の行に到達するまで続行します。
これをより明確にするには:step
喜んで関数呼び出しに入り、その関数内でブレークします。対照的に、next
戻るまで関数を実行し、次の行で中断します。
他のデバッガーや IDE でも、これを「ステップイン」(ステップの代わり) および「ステップオーバー」(次の代わり) と呼びます。
では、これら 2 つを使用してみましょう:
$ python3 breakpointing.py -> print(a) (Pdb) s 3 -> for i in range(1, 10): (Pdb) s -> a = add_two(i) (Pdb) n -> breakpoint() (Pdb) n -> print(a) (Pdb) n 4 -> for i in range(1, 10): (Pdb) s -> a = add_two(i) (Pdb) s --Call-- -> def add_two(x): (Pdb) s -> return x + 2 (Pdb) s --Return-- 5 -> return x + 2 (Pdb) s -> breakpoint() (Pdb)
ご覧のとおり、最初に add_two
への呼び出しをステップ オーバーします。 n
で . 2 回目は、s
で関数にステップ インします。 .
Python デバッガ コマンド
自分で試すことができるコマンドは他にもあります。すべてをリストするのではなく、最も役立つものだけをリストします:
h
(ヘルプ):利用可能なすべてのコマンドを出力します。また、引数を取ります。h c
c
が何であるかを教えてくれます コマンドはc
(続行):次のブレークポイントまで実行を開始l
(list):現在の行周辺のソース コードを一覧表示p
:次の式の結果を出力します。print()
を呼び出す代わりにこれを使用できますpp
:辞書などのデータ構造を印刷するのに便利なプリティ プリント- 再起動:現在のプログラムを再起動します
完全なドキュメントについては、すべてのコマンドが一覧表示されている Python デバッガー ページにアクセスしてください。
学び続ける
これは非常に便利ですが、IDE が提供するデバッガーに飛び込む価値があります。あなたが VSCode ユーザーなら、VSCode で Python コードをデバッグする方法に関するチュートリアルを書きました。
Python
- Python の入力、出力、およびインポート
- メンテナンスプロセスを最適化して効率を向上させる
- Python Print() ステートメント:例を使用して印刷する方法
- Python 文字列:置換、結合、分割、反転、大文字と小文字
- Python time.sleep():コードに遅延を追加する (例)
- Python New Line:Python で改行なしで印刷する方法
- 接続された艦隊はあなたの収益を改善します
- プロトタイプが製造プロセスをどのように改善するか
- 板金部品を改善する5つの方法
- 機器のメンテナンス計画を改善するための3つのヒント
- ヒントと考慮事項:PCB 設計スキルを向上させる方法を学ぶ