Jupyter上でデバッグしたい
print文を挟み、何回も繰り返し実行しながらデバッグの根源を突き止めるのはやめたい気持ち.
- ブレークポイントを指定しデバッグする方法
- エラー発生時にデバッガを起動する方法
- エラー発生後にデバッガを起動する方法
の3つの方法を紹介します。
ブレークポイントを指定するデバッグ
デバッグをしたい行が明確な場合,
以下行をデバッグしたい行に挟みます.
from IPython.core.debugger import Pdb; Pdb().set_trace()
実行例
以下はi
が10になったらブレークする例です. たしかにi=10
が確認できますね.
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F180836%2Ff2b74157-c6da-8344-6a97-8d66c6c1a472.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=80e2c44b0b2bf291cc8333038755e063)
エラー発生時にデバッガを起動する方法
バグがどこかで発生した段階でPdbを起動させたい場合。
%pdb on
# %pdb off ← デバッグ検知モードをoffにしたい時
実行例
i == 10
の時に意図的にエラーを発生させています. ちゃんとデバッガが起動していますね.
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F180836%2F397ff7ce-6e81-4c6f-d749-1399312e9bd6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=85432aafd8b99e1f47f7980e1b4c5192)
エラー発生後にデバッガを起動する方法
特定のセルでエラーが発生した時、後からPdbを起動させたい場合。
%debug
実行例
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F180836%2Fdd47dc17-884a-4822-37b3-a0d6a6d39b4a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=51cf92defa7ce2641e45c4bce918d820)
よく使うコマンド
ここらへんですかね. 便利なのあったら教えてください
コマンド | 説明 |
---|---|
w | スタックトレースを表示 (where) |
n | 次の行に入るまで実行 (next) |
c | 次のブレークポイントまで実行を継続 (continue) |
q | 最後まで実行して終了 (quit) |
d | 関数の中に潜る (down) |
u | 関数の外で出る (up) |
s | 次の関数呼び出しまで実行 (step) |
r | 現在の関数が復帰するまで実行 (return) |