使用python自帶的pdb庫對python的程序進行調試,簡直方便到家~~
以下是常用的命令:
命令 | 用途 |
---|---|
args/a | 打印當前函數的參數 |
break/b | 設置斷點 |
clear/cl | 清除斷點 |
continue/c | 繼續執行程序 |
disable | 禁用斷點 |
enable | 啓動斷點 |
ignore | 忽略斷點 |
jump/j | 跳轉到指定行數運行 |
list/l | 查看當前的代碼段 |
step/s | 執行下一步,遇到函數進入其內部 |
return/r | 執行代碼直到從當前函數返回 |
exit/q | 終止並退出 |
next/n | 執行下一行,遇到函數不進入其內部 |
pp 變量 | 打印變量的值 |
tbreak | 設置臨時斷點,斷點只終端一次 |
where/w | 查看所在的位置 |
help | 幫助 |
接下來用幾個例子介紹一下pdb的使用
用pdb進行調試有多種方式可選,這裏只介紹兩種
1. 命令行啓動目標程序
# pdb_test1.py
import pdb
a = 0
for i in range(10):
a = a+i
print a
print 'end!'
print a
以上面的程序爲例子,通過命令行來啓動目標程序是指不在程序的代碼中手動加斷點,而是通過執行以下命令來調試,通過這種方式調試程序,斷點就是程序執行第一行之前
[vagrant@localhost test_pdb]$ python -m pdb pdb_test1.py # 開始調試pdb_test1.py程序
> /home/vagrant/test_pdb/pdb_test1.py(1)<module>()
-> import pdb # 斷點就是程序執行第一行之前
(Pdb)
接下來我們就使用以上的命令調試程序
[vagrant@localhost test_pdb]$ python -m pdb pdb_test1.py # 開始調試pdb_test1.py程序
> /home/vagrant/test_pdb/pdb_test1.py(1)<module>()
-> import pdb # 斷點就是程序執行第一行之前
(Pdb) n
> /home/vagrant/test_pdb/pdb_test1.py(3)<module>()
-> a = 0
(Pdb) n # 執行下一行
> /home/vagrant/test_pdb/pdb_test1.py(5)<module>()
-> for i in range(10):
(Pdb) n
> /home/vagrant/test_pdb/pdb_test1.py(6)<module>()
-> a = a+i
(Pdb) pp i # 打印i的值
0 # i=0
(Pdb) pp a # 打印a的值
0 # a=0
(Pdb) n
> /home/vagrant/test_pdb/pdb_test1.py(7)<module>()
-> print a
(Pdb) n
0
> /home/vagrant/test_pdb/pdb_test1.py(5)<module>()
-> for i in range(10):
(Pdb) pp i # 打印i的值
0 # i=0,因爲 for i in range(10) 這一句還沒有執行,i的值並沒有增加
(Pdb) n
> /home/vagrant/test_pdb/pdb_test1.py(6)<module>()
-> a = a+i
(Pdb) pp i # 打印i的值,i=1
1
(Pdb) n
> /home/vagrant/test_pdb/pdb_test1.py(7)<module>()
-> print a
(Pdb) pp a # 打印a的值,a=1
1
(Pdb) n
1
> /home/vagrant/test_pdb/pdb_test1.py(5)<module>()
-> for i in range(10):
(Pdb) l # 顯示程序執行到哪一行
1 import pdb
2
3 a = 0
4
5 -> for i in range(10): # 箭頭所指就是程序執行到的地方
6 a = a+i
7 print a
8
9 print 'end!'
10 print a
[EOF]
(Pdb) r # 執行代碼直到從當前函數返回
3
6
10
15
21
28
36
45
end!
45
--Return--
> /home/vagrant/test_pdb/pdb_test1.py(10)<module>()->None
-> print a # 執行到了程序的最後一行
(Pdb) l
5 for i in range(10):
6 a = a+i
7 print a
8
9 print 'end!'
10 -> print a
[EOF]
(Pdb) pp a
45
(Pdb) q # 退出調試
2. 設置硬斷點進行調試
通過在代碼段中加入以下代碼,可以在程序中設置斷點
pdb.set_trace()
# pdb_test2.py
import pdb
a = 0
pdb.set_trace() # 在這裏設置了硬斷點
for i in range(10):
a = a+i
print a
print 'end!'
print a
設置斷點後,再調試程序直接執行一下命令就可以了
[vagrant@localhost test_pdb]$ python pdb_test2.py # 開始調試程序
> /home/vagrant/test_pdb/pdb_test2.py(7)<module>()
-> for i in range(10):
(Pdb) l
2
3 a = 0
4
5 pdb.set_trace()
6
7 -> for i in range(10): # 程序直接從斷點的下一行代碼進行調試
8 a = a+i
9 print a
10
11 print 'end!'
12 print a
(Pdb) c # 繼續運行,直到遇到斷點或腳本結束
0
1
3
6
10
15
21
28
36
45
end!
45