hoamon's sandbox

"sandbox" is a jargon of Version Control System.

Python: 簡易除錯模組 pdb

我很習慣用Vim來作任何有關文字編輯的工作,包含改設定檔、寫程式、寫網頁,甚至是大量改檔名的時候,我也是先用 Vim 編輯要打的指令之後才送 shell 處理。 Vim 真的是文字編輯領域的佼佼者。

然寫程式時,總要用到debug,而目前一般用來寫 perl、python 的 IDE 工具,像是 Eclipse、komodo 等,有方便的 debug 功能,卻少了像 Vim 般強大的編輯方法,使得我用起來總是少了那麼一點點的感覺。

還好如 perl、python 強大的語言,自己會帶著除錯工具。 perl 除錯器是在執行時帶入 -d 參數即可,如:

# perl -d some.pl

而 python 則是提供一個模組 pdb 。本文即是一個 pdb 模組的簡易教學文件。

使用 pdb 模組十分簡單,在你的程式中載入 pdb 模組,並設定好中斷點,即可執行。程式範例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/usr/bin/python
#本檔名為 pdb_example.py

import pdb #載入pdb模組
def complex_sum(x1, x2):
    print 'do something 1'
    value1 = 1 * x1
    value2 = 1 * x2
    return value1 + value2

a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
pdb.set_trace() #中斷點
b = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for i in a:
    for j in b:
        print complex_sum(i, j)

我在第 12 行設了一個中斷點。接下在 shell 中執行 python pdb_example.py ,執行後,它會給你一個(Pdb) 命令列。

進入 Pdb 後,它先到中斷點的下一行,本範例是 b = [1, 2, 3, 4, 5, 6, 7, 8, 9] ,但秀出的這一行實際上是還未執行的。如果整個程式你只有載入 pdb ,但未設定中斷點,則 python 會直接執行你的程式。事實上,你只要學會了 q、p、n、c、s、r、l、!,你就能輕易操作 python debugger 了。

執行任何程式,一定要先知道離開方法是什麼。打個 q ,按下 [Enter] 即可離開。

q(quit):離開
p [some variable](print):秀某個變數的值
n(next line):下一行
c(continue):繼續下去
s(step into):進入函式
r(return): 到本函式的return敘述式
l(list):秀出目前所在行號
!: 改變變數的值

P.S. Vim 的離開指令是 [Esc]:q! ,不知道請勿使用 Vim 。

Fork me Related Posts Plugin for WordPress, Blogger...