你有多少次陷入不得不更改別人代碼的境地?如果你是一個開發團隊的一員,那么你遇到上述境地的次數比你想要的還要多。然而,Python中有一個整潔的調試特性(像其他大多數語言一樣),在這種情況下使用非常方便。本文是一篇快速教程,希望它能讓你的編碼生活更加容易。
1. 一個混亂的程序
出于本教程的目的,讓我們研究一下下面的簡單程序。
這個程序接收兩個命令行參數,然后執行加法和減法操作。
(假設用戶輸入的是有效值,因此代碼中我們沒有進行錯誤處理。)
import sysdef add(num1=0, num2=0): return int(num1) + int(num2)def sub(num1=0, num2=0): return int(num1) - int(num2)def main(): #Assuming our inputs are valid numbers print sys.argv addition = add(sys.argv[1], sys.argv[2]) print addition subtraction = sub(sys.argv[1], sys.argv[2]) print subtractionif __name__ == '__main__': main()
2. PDB
Python提供了一個有用的模塊PDB,它實際上是一個交互式源代碼調試器。
你需要下面的兩行代碼來使用此模塊。
import pdbpdb.set_trace()
看一下我們修改過的程序,里面包含了一些斷點。
import pdbimport sysdef add(num1=0, num2=0): return int(num1) + int(num2)def sub(num1=0, num2=0): return int(num1) - int(num2)def main(): #Assuming our inputs are valid numbers print sys.argv pdb.set_trace() # <-- Break point added here addition = add(sys.argv[1], sys.argv[2]) print addition subtraction = sub(sys.argv[1], sys.argv[2]) print subtractionif __name__ == '__main__': main()
3. 程序執行觸發調試器
一旦你設置好斷點以后,你就可以像平時一樣執行程序。
python debugger.py 1 2
程序將會在遇到的第一個斷點處停止執行。
['debugger.py']> /Users/someuser/debugger.py(15)main()-> addition = add(sys.argv[1], sys.argv[2])(Pdb)
我們在第14行設置了一個斷點,所以我們能看到將要執行的下一行是第15行。可以看到,在執行到第15行之前程序已經停止。
在這里我們有幾個選項,讓我們在下面步驟中看看一些調試指令。
4. 下一行->n
在你的調試器提示中,輸入n運行到下一行。
> /Users/someuser/debugger.py(14)main()-> addition = add(sys.argv[1], sys.argv[2])(Pdb) n> /Users/someuser/debugger.py(15)main()-> print addition
這會執行當前行代碼,并準備執行下一行。
我們可以使用n來逐行執行整個程序,但這其實沒有什么用處。
可能你已經看到,PDB實際上并沒有進入我們的add函數中。下面,就讓我們看看其他幾個令調試更加有趣的選項。
新聞熱點
疑難解答