標籤:
簡單調試 Python 程式
在 Python 中也可以像 gcc/gdb 那樣偵錯工具,只要在運行 Python 程式時引入 pdb 模組(假設要調試的程式名為 d.py):
$ vi d.py#!/usr/bin/pythondef main(): i, sum = 1, 0 for i in xrange(100): sum = sum + i print sumif __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:6Breakpoint 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 Bsum = sum + i 7 print sum 8 9 if __name__ == ‘__main__‘: 10 main()[EOF]
如果想在函數處設定斷點:
(Pdb) break d.maind.py:3(Pdb) list 1 #!/usr/bin/python 2 3 Bdef 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 > 50Breakpoint 1 at d.py:6
如果想查看某個變數的值,可以用 pp 命令列印出來:
(Pdb) step> d.py(5)main()-> for i in xrange(100):(Pdb) pp sum0
可以直接在程式裡使用 pdb 模組,import pdb 後 pdb.set_trace():
#!/usr/bin/pythonimport pdbdef main(): i, sum = 1, 0 for i in xrange(100): sum = sum + i pdb.set_trace() print sumif __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 |
協助 |
python 用pdb調試