之前除錯python程式都是用print引數,感覺有點弱爆啊,最近發現python也有類似c語言gdb的工具pdb,記錄下pdb的使用方法和心得。
先找了段簡單的測試程式:
複製**
from ftplib import ftp
import sys
import socket
import pdb
def passwordcorrect(ip,port,username,password):
try:
client = ftp()
pdb.set_trace()
client.connect(ip,port)
client.login(username,password)
client.close()
except exception, e:
pdb.set_trace()
client.close()
if str(e).find('unknown ip address')!=-1:
return 2
return 0
print "correct"
return 1
ifname== 'main':
socket.setdefaulttimeout(3)
ret = passwordcorrect('127.0.0.1',21,'test','test')
print "return is ",ret
複製**
pdb的常用命令說明:
l #檢視執行到哪行**
n #單步執行,跳過函式
s #單步執行,可進入函式
p 變數 #檢視變數值
b 行號 #斷點設定到第幾行
b #顯示所有斷點列表
cl 斷點號 #刪除某個斷點
cl #刪除所有斷點
c #跳到下乙個斷點
r #return當前函式
exit #退出
除錯記錄:
pdb設定斷點可以在程式裡加入:
import pdb
在需要設定斷點的地方加入pdb.set_trace()
執行python -m pdb test.py
[root@wh practice]# vim test.py
[root@wh practice]# python -m pdb test.py
/home/practice/test.py(2)()複製**-> from ftplib import ftp
(pdb) c
/home/practice/test.py(10)passwordcorrect()
-> client.connect(ip,port)
按c逐個執行到下乙個斷點,按p ip 就可以檢視變數ip的值
exit退出當前函式
python除錯方法
最簡單print 只是影響 美觀,而且需要在後面刪掉,比較麻煩 凡是用print來輔助檢視的地方,都可以用斷言 assert 來替代 err.py deffoo s n int s assert n 0,n is zero return 10 n defmain foo 0 可以通過 0 引數來關閉...
Python 除錯方法
from 這幾天一直在查乙個線上程式 hang 住的問題.這個程式總是在執行50分鐘後 hang 住,通過以下的一些除錯手段,發現是打日誌的時候因為 buffer 滿被 block 了.python 日誌是預設打到 stderr 的,無論日誌級別.而我這個程式是被另乙個程式調起的,父程序沒有接收子程...
python 除錯方法
一 使用pdb 二 使用gdb需首先配置gdb pythin支援,步驟如下 1 修改python 2.6 misc gdbinit,將 while i f f nlocals修改為 while i f f code co nlocals2 在檔案 gdbinit中,加入如下內容 source pyt...