簡單調試 Python 程序

在 Python 中也可以像 gcc/gdb 那樣調試程序,只要在運行 Python 程序時引入 pdb 模塊(假設要調試的程序名爲 d.py):

$ vi d.py
#!/usr/bin/python

def main():
        i, sum = 1, 0
        for i in xrange(100):
                sum = sum + i
        print sum

if __name__ == '__main__':
        main()

$ python -m pdb d.py

運行上面的命令後進入以下界面,可以輸入類似 gdb 的命令來改變程序的執行流程:

$ python -m pdb 1.py 
> d.py(3)()
-> def main():
(Pdb) 

list 顯示程序的最近代碼段:

(Pdb) list
  1  	#!/usr/bin/python
  2  	
  3  ->	def main():
  4  		i, sum = 1, 0
  5  		for i in xrange(100):
  6  			sum = sum + i
  7  		print sum
  8  	 
  9  	if __name__ == '__main__':
 10  		main()
[EOF]

next 或者 n 執行下一行代碼:

(Pdb) next
> d.py(9)()
-> if __name__ == '__main__':

用 break 在第6行設置一個斷點:

(Pdb) break d.py:6
Breakpoint 1 at d.py:6

(Pdb) list
  1  	#!/usr/bin/python
  2  	
  3  	def main():
  4  		i, sum = 1, 0
  5  ->		for i in xrange(100):
  6 B			sum = sum + i
  7  		print sum
  8  	 
  9  	if __name__ == '__main__':
 10  		main()
[EOF]

如果想在函數處設置斷點:

(Pdb) break d.main
d.py:3

(Pdb) list
  1  	#!/usr/bin/python
  2  	
  3 B	def main():
  4  ->		i, sum = 1, 0
  5  		for i in xrange(100):
  6  			sum = sum + i
  7  		print sum
  8  	 
  9  	if __name__ == '__main__':
 10  		main()
[EOF]

還可以給斷點加條件,比如設置條件只有當 sum > 50 的時候才 break:

(Pdb) break d.py:6, sum > 50
Breakpoint 1 at d.py:6

如果想查看某個變量的值,可以用 pp 命令打印出來:

(Pdb) step
> d.py(5)main()
-> for i in xrange(100):
(Pdb) pp sum
0

可以直接在程序裏使用 pdb 模塊,import pdb 後 pdb.set_trace():

#!/usr/bin/python
import pdb

def main():
        i, sum = 1, 0
        for i in xrange(100):
                sum = sum + i
        pdb.set_trace()
        print sum

if __name__ == '__main__':
        main()

這樣只要運行程序 ./d.py 就可以直接運行到 print sum 處:

$ ./d.py 
> d.py(9)main()
-> print sum
(Pdb) 

總結

命令 用途
break 或 b 設置斷點
continue 或 c 繼續執行程序
list 或 l 查看當前行的代碼段
step 或 s 進入函數
return 或 r 執行代碼直到從當前函數返回
exit 或 q 中止並退出
next 或 n 執行下一行
pp 打印變量的值
help 幫助
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章