The Python Debugger Pdb

Python Debugger

pdb

The Python Debugger Pdb
能夠直接在命令行中啓動,調試程序
也能夠寫在代碼中html

命令行使用

能夠直接在命令行指定要進行調試的程序python

python -m pdb my_test.py

以後會顯示當前代碼執行的位置
經過輸入命令進行操做express

命令

命令 做用
h(elp) 幫助
w(here) 打印當前堆棧
d(own)[count] 執行跳轉到當前堆棧的深 [count] 層,默認爲 1
u(p) 執行跳轉到當前堆棧的上 [count] 層,默認爲 1
b(reak)[ ([filename:]lineno | function) [, condition] ] 不加參數:列出全部斷點;
指定行號:(能夠指定其餘文件的一行) 在當前行添加斷點;
指定函數:在函數的第一個可執行語句添加斷點;
指定條件:當條件語句知足時斷點生效
tbreak[ ([filename:]lineno | function) [, condition] ] 臨時斷點,生效一次後自動刪除,使用方法同 b(reak)
cl(ear) 不加參數:清除全部斷點;
指定行號:(能夠指定其餘文件的一行) 清除當前行斷點;
指定斷點號:清除此斷點
disable bpnumber [bpnumber ...] 停用斷點
enable bpnumber [bpnumber ...] 激活斷點
condition bpnumber [condition] 爲此斷點設定條件
s(tep) 執行下一條命令,若是是函數調用,就執行到調用函數的第一句(會進入到調用的函數內部)
n(ext) 執行下一條語句,若是是函數調用,就執行函數,以後執行下一條語句(不會進入調用的函數內部)
unt(il) [lineno] 不帶參數的狀況下,繼續執行,直到到達行號大於當前行的行號爲止。使用[lineno],繼續執行直到行號大於或等於[lineno]。
r(eturn) 繼續執行,直至當前函數 return
retval 打印函數最後一次的返回值
run [args...] 從新啓動程序,至關於restart
c(ont(inue)) 繼續執行,直至遇到斷點
l(ist) 列出當前語句周圍 11 行的源碼。
若是有一個參數,列出該行號周圍 11 行的源碼。
若是有兩個參數,列出區間內的源碼。
若是有兩個參數,且後面的小,前面的參數爲行號,後面參數爲列出源碼的行數。
longlist | ll 列出當前函數的所有源碼
a(rgs) 列出當前函數的全部參數
whatis arg 打印參數類型
p expression 輸出 expression 的值
pp expression 好看一點地輸出 expression 的值
q(uit) exit 退出 debugger 中止執行語句

set_trace

set_trace() 是最經常使用的斷點方式,放置在代碼中,程序會停在斷點處,輸入命令 c 繼續運行函數

示例:ui

import pdb


def main(i):
    for i in range(i):
        pdb.set_trace()
        print(i)


if __name__ == '__main__':
    main(10)

輸出:命令行

> /dir/test.py(7)main()
-> print(i)
(Pdb)

表示執行到 /dir/test.py 的第 7 行,main() 函數中,語句爲 print(i)debug

breakpoint()

Python 3 中加入了內置函數 breakpoint() 能夠直接調用 pdb,至關於 pdb.set_trace()調試

run & runeval

會在當前位置打斷點,接下來會執行字符串類型的表達式rest

用法

run(cmd, globals=None, locals=None) 會對傳入的參數執行 exec()
runeval(expr, globals=None, locals=None) 會對傳入的參數執行 eval()code

關於 exec()eval() <- 點擊查看

若是不傳入參數,則默認使用全局變量(__main__.dict) 若是要傳入參數就要將所有參數以字典形式傳入,使用沒有傳入的參數會報錯

相關文章
相關標籤/搜索