python除錯方法

2022-07-19 00:00:29 字數 1495 閱讀 1103

之前除錯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...