使用pdb模組調試Python指令碼

來源:互聯網
上載者:User

標籤:python   pdb   

在Python中,語法錯誤可以被Python解譯器發現,但邏輯上錯誤或變數使用錯誤卻不容易發現,如果結果沒有符合預期,則需要調試,一個很好的調試工具:Python內建的pdb模組。pdb是Python內建的調試模組。使用pdb模組可以為指令碼設定斷點、逐步執行、查看變數值等。

pdb可以用命令列參數的方式啟動,也可以使用import 將其匯入後再使用。

>>> dir(pdb)['Pdb', 'Repr', 'Restart', 'TESTCMD',.....,'re', 'run', 'runcall', 'runctx', 'runeval', 'set_trace', 'sys', 'test', 'traceback']

常見的pdb函數有以下幾個:

pdb.run()函數

>>> 該函數主要用於調試語句塊

>>> 基本用法如下

>>> help(pdb.run)Help on function run in module pdb:run(statement, globals=None, locals=None)

>>>參數含義

statement: 要調試的語句塊,以字串的形式表示

globals:   選擇性參數,設定statement啟動並執行全域環境變數

locals:     選擇性參數,設定statement啟動並執行局部環境變數 

>>>簡單樣本

>>> import pdb                # 匯入調試模組>>> pdb.run('''               # 調用run()函數執行一個for迴圈for i in range(3):    i *= 3    print(i)    ''')> <string>(2)<module>()     (Pdb) n                       # (Pdb)為調試命令提示字元,表示可輸入調試命令> <string>(3)<module>()(Pdb) n                       # n(next)表示執行下一行> <string>(4)<module>()(Pdb) print(i)                # 列印變數i的值0(Pdb) continue                # 繼續運行程式036

pdb.runeval()函數

>>>該函數主要用於調試運算式

>>>基本用法如下

>>> help(pdb.runeval)Help on function runeval in module pdb:runeval(expression, globals=None, locals=None)
>>> 參數含義

expression: 要調試的,

globals:   選擇性參數,設定statement啟動並執行全域環境變數

locals:     選擇性參數,設定statement啟動並執行局部環境變數 

>>> 簡單樣本
>>> import pdb                  # 匯入pdb模組>>> lst = [1, 2, 3]             # 定義一個列表>>> pdb.runeval('lst[1]')       # 調用runaval()函數來調試運算式lst[1]> <string>(1)<module>()(Pdb) n                         # 進入調試狀態,使用n命令,逐步執行--Return--> <string>(1)<module>()->2(Pdb) n                         # 逐步執行2                               # 返回運算式的值>>> pdb.runeval('3 + 5*6/2')    # 使用runaval()函數來調試運算式3+5*6/2> <string>(1)<module>()->2(Pdb) n--Return--> <string>(1)<module>()->18(Pdb) n                         # 使用n命令逐步執行18                              # 最後得出運算式的值
pdb.runcall()函數

>>>該函數主要用於調試函數

>>>基本用法如下

>>> help(pdb.runcall)Help on function runcall in module pdb:runcall(*args, **kwds)
>>> 參數含義
function:          函數名

args(kwds):        函數的參數
>>> 簡單樣本

>>> import pdb                           # 匯入模組>>> def sum(*args):                      # 定義函數sum,求所有參數之和res = 0for arg in args:res += argreturn res>>> pdb.runcall(sum, 1, 2, 3, 4)         # 使用runcall調試函數sum> <pyshell#53>(2)sum()(Pdb) n                                  # 進入調試狀態,逐步執行> <pyshell#53>(3)sum()(Pdb) n                                  # 逐步執行> <pyshell#53>(4)sum()       (Pdb) print(res)                         # 使用print列印res的值0(Pdb) continue                           # 繼續執行10>>> pdb.runcall(sum, 1, 2, 3, 4, 5, 6)   # 調用runcall調試函數sum,參數不同> <pyshell#53>(2)sum()               (Pdb) continue                           # 繼續執行21                                       # 函數最後返回結果
pdb.set_trace()函數

>>>該函數主要用於指令碼中設定硬斷點

>>>基本用法如下

>>> help(pdb.set_trace)Help on function set_trace in module pdb:set_trace()
>>> 簡單樣本
# file: test.pyimport pdbpdb.set_trace()for i in range(5):    i *= 5    print(i)
運行指令碼後顯示:
> d:\learn\python\test.py(6)<module>()-> for i in range(5):(Pdb) list                     # 使用list列出指令碼內容  1  # file: test.py  2    3  import pdb  4    5  pdb.set_trace()        # 使用set_trace()設定硬斷點  6  ->for i in range(5):  7      i *= 5  8      print(i)[EOF]                          # 列出指令碼內容結束(Pdb) continue                 # 使用continue繼續執行05101520

pdb調試命令

pdb中的調試命令可以完成逐步執行、列印變數值、設定斷點等功能。pdb主要命令如下

------------------------------------------------------------------------------# 完整命令                    簡寫命令                      描述------------------------------------------------------------------------------# args                         a                            列印當前函數的參數# break                        b                            設定斷點# clear                        cl                           清除斷點# condition                    無                           設定條件斷點# continue                     c                            繼續運行,直到遇到斷點或者指令碼結束# disable                      無                           禁用斷點# enable                       無                           啟用斷點# help                          h                           查看pdb協助# ignore                       無                           忽略斷點# jump                         j                            跳轉到指定行數運行# list                         l                            列出指令碼清單# next                         n                            執行下條語句,遇到函數不進入其內部# print                        p                            列印變數值# quit                         q                            退出pdb# return                       r                            一致運行到函數返回# tbreak                       無                           設定臨時斷點、斷點只中斷一次# step                         s                            執行下一條語句,遇到函數進入其內部# where                        w                            查看所在的位置# !                           無                           在pdb中執行語句                    

          



使用pdb模組調試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.