目次
プログラミング教育者。ScratchやPythonを教えています。
工作HardwareHubからのお知らせ
pdb は ruby デバッガ rdb の python 版です。
起動方法
$ python -m pdb buggy.py
buggy.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
def div(x, y):
return x / y
def main():
x = 6
for i in [3, 2, 1, 0]:
x = div(x, i)
return x
if __name__ == '__main__':
main()
デバッグコマンド
現在地の表示 (l)
例えば l 0
とすると下まで閲覧した後であっても最初の行を表示できます。
(Pdb) l
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 -> def div(x, y):
5 return x / y
6
7 def main():
8 x = 6
9 for i in [3, 2, 1, 0]:
10 x = div(x, i)
11 return x
ブレークポイントまで進む (b, c)
(Pdb) b 8
Breakpoint 1 at /home/vagrant/buggy.py:8
(Pdb) c
> /home/vagrant/buggy.py(8)main()
-> x = 6
1 行進んでプリント (s, p, pp, dir)
(Pdb) s
> /home/vagrant/buggy.py(9)main()
-> for i in [3, 2, 1, 0]:
(Pdb) l
4 def div(x, y):
5 return x / y
6
7 def main():
8 B x = 6
9 -> for i in [3, 2, 1, 0]:
10 x = div(x, i)
11 return x
12
13 if __name__ == '__main__':
14 main()
(Pdb) pp x
6
(Pdb) p x
6
(Pdb) dir(x)
['__abs__', '__add__', '__and__',..., 'real']
ブレークポイントの解除 (cl)
(Pdb) cl
Clear all breaks? y
関数の中に入らない (n)
s は中に、中にと入っていく。n は同じレベルで次の行に進む。同じコマンドの繰り返しはエンターで代用できます。一度 s を実行してからエンターを連打する、ということが可能です。
現在の関数を抜ける (r + s)
一度 r を実行して、次に s を実行すると現在の関数から抜けた直後の状態になります。
デバッガの終了 (q, ctrl-d)
どのような経路で現在の状況に至ったのか (w)
スクリプトに直接記載
set_trace()
と記載した箇所からデバッガを起動することができます。
$ python buggy.py
buggy.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pdb
def div(x, y):
return x / y
def main():
x = 6
for i in [3, 2, 1, 0]:
x = div(x, i)
pdb.set_trace()
return x
if __name__ == '__main__':
main()
0
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- Python コードスニペット (条件分岐)if-elif-else sample.py #!/usr/bin/python # -*- coding: utf-8 -*- # コメント内であっても、ASCII外の文字が含まれる場合はエンコーディング情報が必須 x = 1 # 一行スタイル if x==0: print 'a' # 参考: and,or,notが使用可能 (&&,||はエラー) elif x==1: p...
- Python コードスニペット (リスト、タプル、ディクショナリ)リスト range 「0から10まで」といった範囲をリスト形式で生成します。 sample.py print range(10) # for(int i=0; i<10; ++i) ← C言語などのfor文と比較 print range(5,10) # for(int i=5; i<10; ++i) print range(5,10,2) # for(int i=5; i<10;...
- ZeroMQ (zmq) の Python サンプルコードZeroMQ を Python から利用する場合のサンプルコードを記載します。 Fixing the World To fix the world, we needed to do two things. One, to solve the general problem of "how to connect any code to any code, anywhere". Two, to wra...
- Matplotlib/SciPy/pandas/NumPy サンプルコードPython で数学的なことを試すときに利用される Matplotlib/SciPy/pandas/NumPy についてサンプルコードを記載します。 Matplotlib SciPy pandas [NumPy](https://www.numpy
- pytest の基本的な使い方pytest の基本的な使い方を記載します。 適宜参照するための公式ドキュメントページ Full pytest documentation API Reference インストール 適当なパッケージ