用PDB庫調試Python程序


用pdb調試有多種方式可選:

1. 命令行啟動目標程序,加上-m參數,這樣調用myscript.py的話斷點就是程序的執行第一行之前
python -m pdb myscript.py

2. 在Python交互環境中啟用調試
>>> import pdb
>>> import mymodule
>>> pdb.run(‘mymodule.test()’)

在 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
幫助

參考自:http://www.vpsee.com/2009/09/debug-python-programwith-pdb/

http://magustest.com/blog/python/use-pdb-debug-python/

http://linhs.blog.51cto.com/370259/125323


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM