python調試代碼舉例

來源:互聯網
上載者:User

標籤:python   多線程   import   程式   斷點   

Python內建的pdb庫,發現用pdb來偵錯工具還是很方便的,當然了,什麼遠端偵錯,多線程之類,pdb是搞不定的。

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

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

python -m pdb myscript.py

2. 在Python互動環境中啟用調試

>>> import pdb

>>> import mymodule

>>> pdb.run(‘mymodule.test()‘)

3. 比較常用的,就是在程式中間插入一段程式,相對於在一般IDE裡面打上斷點然後啟動debug,不過這種方式是hardcode的

if __name__ == "__main__":

a = 1

import pdb

pdb.set_trace()

b = 2

c = a + b

print (c)

然後正常運行指令碼,到了pdb.set_trace()那就會定下來,就可以看到調試的提示符(Pdb)了

常用的調試命令

h(elp),會列印目前的版本Pdb可用的命令,如果要查詢某個命令,可以輸入 h [command],例如:“h l” — 查看list命令 

l(ist),可以列出當前將要啟動並執行代碼塊 

(Pdb) l

497 pdb.set_trace()

498 base_data = {}

499 new_data = {}

500 try:

501 execfile(base_file_name,{},base_data)

502 -> execfile(new_file_name,{},new_data)

503 except:

504 logger.writeLog(“error! load result log error!”)

505 print “load cmp logs error!”

506 raise Exception, “load cmp logs error!”

507 

b(reak), 設定斷點,例如 “b 77″,就是在當前指令碼的77行打上斷點,還能輸入函數名作為參數,斷點就打到具體的函數入口,如果只敲b,會顯示現有的全部斷點 

(Pdb) b 504

Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504

condition bpnumber [condition],設定條件斷點,下面語句就是對第4個斷點加上條件“a==3” 

(Pdb) condition 4 a==3

(Pdb) b

Num Type Disp Enb Where

4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504

stop only if a==3

cl(ear),如果後面帶有參數,就是清除指定的斷點(我在Python2.4上從來沒成功過!!!);如果不帶參數就是清除所有的斷點 

(Pdb) cl

Clear all breaks? y

disable/enable,禁用/啟用斷點 

(Pdb) disable 3

(Pdb) b

Num Type Disp Enb Where

3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505

n(ext),讓程式運行下一行,如果當前語句有一個函數調用,用n是不會進入被調用的函數體中的

s(tep),跟n相似,但是如果當前有一個函數調用,那麼s會進入被調用的函數體中 

c(ont(inue)),讓程式正常運行,直到遇到斷點 

j(ump),讓程式跳轉到指定的行數 

(Pdb) j 497

> /home/jchen/regression/regressionLogCMP.py(497)compareLog()

-> pdb.set_trace()

a(rgs),列印當前函數的參數 

(Pdb) a

_logger =

_base = ./base/MRM-8137.log

_new = ./new/MRM-8137.log

_caseid = 5550001

_toStepNum = 10

_cmpMap = {‘_bcmpbinarylog‘: ‘True‘, ‘_bcmpLog‘: ‘True‘, ‘_bcmpresp‘: ‘True‘}

p,最有用的命令之一,列印某個變數 

(Pdb) p _new

u‘./new/MRM-8137.log‘

!,驚嘆號後面跟著語句,可以直接改變某個變數 

q(uit),退出調試 

發現在命令列下偵錯工具也是一件挺有意思的事情,記錄下來分享一下

w ,Print a stack trace, with the most recent frame at the bottom.An arrow indicates the "current frame", which determines the context of most commands. ‘bt‘ is an alias for this command.

d ,Move the current frame one level down in the stack trace

(to a newer frame).

u ,Move the current frame one level up in the stack trace

(to an older frame).

使用 u 和 d 命令,我們可以在棧幀之間切換,用以擷取其相關上下文變數資訊。w可以顯示最近的一些棧幀資訊。

編程代碼來自CODEGO.NET


本文出自 “tianajiejue” 部落格,請務必保留此出處http://10068262.blog.51cto.com/10058262/1629040

python調試代碼舉例

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.