免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3728 | 回复: 0
打印 上一主题 下一主题

pdb调试python程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-23 10:48 |只看该作者 |倒序浏览
學習與使用 Python 至今,一直都是使用 UltraEdit 與命令列的直譯器搭配。一旦遇到需要追蹤程式碼時,也只能仰仗 Python 語言開發快速的特性,再加上 print 來除錯,但總是沒有像 VC 之類的 IDE,擁有 GUI 的除錯器來得方便。幸運的是, Python 的 pdb package 就提供了這樣一個在命令列下除錯的環境。剛開始使用時一定不會像 GUI debugger 那樣順手,但是寫個小程式,自己追蹤幾次也就熟悉了,其實是不難的(以我這樣一個沒有使用過命令列除錯的人來說)。
使用 pdb package 時, 將要除錯的 Python script 檔名做為參數,交給 %PYTHONHOME%/lib/pdb.py 就行了:
1

%PYTHONHOME%/lib/pdb.py test.py
如此便會進入 pdb 的互動除錯模式:
1
2

> (1)?()
(Pdb)
有一個比較便利的做法是,把上述的命令寫成 bat 檔,放在 %PYTHONHOME%底下。例如一個 pdb.bat,裡面的內容是:
1

c:\python23\lib\pdb.py %1
如此我就可以在命令列下任何地方,喚起 pdb 了,就像喚起 python 一樣。
剛進入 pdb,不會馬上執行指定的檔案。所以先設定第一個中斷點,再從那裡開始。例如:
1
2
3
4

c:\>pdb test.py
> (1)?()
(Pdb)b 1
Breakpoint 1 at c:\test.py:1
這樣第一個中斷點就設定好了,再透過下列的命令,進行除錯。由於我比較熟悉 VC 中的除錯環境,所以我將 pdb 中於 VC debugger 的對應命令註明在後面。命令可以簡寫或完整的方式執行,例如 "b" 和 "break" 都是設定中斷點。
b(reak) [[filename:]lineno|function[, condition]]
在指定的檔案、行數或函數設下中斷點,亦可為這個中斷點設定中斷條件,例如要在 for 敘述的某個狀況下,或是某個值出現時中斷,就可以設定中斷點的條件。如果沒有參數,則列出所有中斷點。(F9)
tbreak [[filename:]lineno|function[, condition]]
和 b 一樣,但是只會中斷一次。
c(ont(inue))
繼續執行,直到遇到中斷點。(F5)
s(tep)
執行目前行;若目前行的動作是參數呼叫,則把該呼叫當成一行指令執行。(F10)
n(ext)
和 s 一樣都是執行目前行。不同的是如果目前行是參數呼叫,則進入該函式。(F11)
w(here)
列出目前 call stack 中的所在層。
d(own)
在 call stack 中往下移一層。
u( p)
在 call stack 中往上移一層。如果在上移一層之後按下 n ,則會在上移之後的一層執行下一個敘述,之前的 function call 就自動返回。
cl(ear) [bpnumber [bpnumber ...]]
清除指定的中斷點。如果沒有帶參數,則清除所有中斷點。
disable [bpnumber [bpnumber ...]]
取消所有中斷點的功能,但仍然保留這些中斷點。
enable [bpnumber [bpnumber ...]]
恢復中斷點的功能。
ignore bpnumber [count]
設定中斷點的忽略次數。如果沒指定 count,其初始 為 0。當 count 為 0 時,中斷點會正常動作。若有指定 count,則每次執行到該中斷, count 就少 1,直到 count 數為 0。
condition bpnumber [condition]
為某個中斷點指定中斷條件。
j(ump) lineno
跳到某行執行。只有在 call stack 的最底部才能作用。
l(ist) [first[, last]]
列出目前所在檔案中的位置。連續地 l 命令會一直列到檔案結尾,可以使用指定行數或範圍來列印。
a(rgs)
列出目前函式所接受的參數
p expression
在目前的環境(context)中求出 expression 的值。
pp expression
和 p 命令類似,但是使用 pprint module(沒用過 pprint,詳情請參考 Python Library Reference)。
alias [name [command]]
以一個"別名"代替"一群除錯命令",有點類似 c/c++ 的 macro(詳情請參考 Python Library Reference)。
unalias name
取消某個 alias。
[!]statement
在目前的環境(context)中執行敘述。
q(uit)
離開除錯模式。
以上是我參考 Python Library Reference 中,第 9 章 "The Python Debugger",所寫的命令備忘錄。也許對這裡的 Python 同好有幫助,如果有錯誤也請多指正!

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/71313/showart_1008898.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP