欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中斷點調(diào)試pdb包的用法詳解

 更新時間:2024年01月03日 16:18:50   作者:kevin小新  
pdb(python debugger) 是 python 中的一個命令行調(diào)試包,為 python 程序提供了一種交互的源代碼調(diào)試功能,下面就跟隨小編一起學習一下它的具體使用吧

pdb(python debugger) 是 python 中的一個命令行調(diào)試包,為 python 程序提供了一種交互的源代碼調(diào)試功能,其官方使用文檔鏈接為 pdb — Python 的調(diào)試器。

pdb 的主要功能包括設置斷點、單步調(diào)試、進入函數(shù)調(diào)試、查看當前代碼、查看變量、棧片段的值等,從而可以減少或者避免使用 print 和 log 等雜亂繁瑣的方式進行 python 代碼的調(diào)試。

安裝及使用方法

pdb 包的安裝方法很簡單,直接在環(huán)境中通過下面的 pip 即可安裝:

pip install pdb

pdb 包的使用方法也很簡單,直接在代碼中想要進入調(diào)試器的地方插入下面兩行命令,然后保存并再次執(zhí)行當前 python 文件就可以自動跳轉(zhuǎn)到該斷點位置,然后便可以自行打印出相關內(nèi)容進行調(diào)試。

import pdb
pdb.set_trace()
# 也可以將上面兩行寫在一行,通過;號分隔
import pdb; pdb.set_trace()

pdb 常用命令

當在代碼中添加了上述的兩行命令運行程序后,程序會自動跳轉(zhuǎn)至代碼所在斷點位置,下面便可以在終端中查看相應的變量進行調(diào)試。進入 pdb 調(diào)試斷點模式后,可以使用命令來控制調(diào)試和檢查程序的狀態(tài),pdb 中一些常用命令如下:

命令解釋
next 或 n繼續(xù)運行,直到運行到當前函數(shù)的下一行
step 或 s運行當前行,在第一個可以停止的位置(在被調(diào)用的函數(shù)內(nèi)部或在當前函數(shù)的下一行)停下
continue 或 c繼續(xù)執(zhí)行程序,直到遇到下一個斷點
list 或 l列出當前文件的源代碼
p XXX打印變量或者表達式的值(XXX為變量或表達式的名稱)
print(XXX) 也可以使用,但它不是一個調(diào)試器命令它執(zhí)行 Python 中的 print() 函數(shù)打印變量XXX的值
return 或 r繼續(xù)執(zhí)行代碼,直到當前函數(shù)返回
quit 或 q退出調(diào)試器,被執(zhí)行的程序?qū)⒈恢兄?/td>
break 或 b設置斷點
help幫助

調(diào)試代碼示例

下面是一個簡單的對 list 的列表 items_list 中所有元素求和并返回的代碼示例,為了通過示例進行演示,博主將 list 中元素求和寫在 sum_list(items) 函數(shù)中,并將兩元素相加(+)又寫成了一個函數(shù) sum_ab(a, b) ,下面的代碼是原始的代碼:

# 對items的所有元素求和并返回
def sum_list(items):
    items_sum = 0
    for i in range(len(items_list)):
        item = items_list[i]
        items_sum = sum_ab(items_sum, item)
    return items_sum

# 對a和b兩個元素進行求和
def sum_ab(a, b):
    sum = a + b
    return sum

if __name__ == "__main__":
    items_list = [1, 2, 3, 4, 5]
    items_sum = sum_list(items_list)
    print("items_sum求和所得的結果為:", items_sum)

在上述代碼中 sum_list(items) 函數(shù)中添加調(diào)試 import pdb; pdb.set_trace() 命令用于設置斷點。

# 對items的所有元素求和并返回
def sum_list(items):
    items_sum = 0
    for i in range(len(items_list)):
        import pdb; pdb.set_trace()
        item = items_list[i]
        items_sum = sum_ab(items_sum, item)
    return items_sum

# 對a和b兩個元素進行求和
def sum_ab(a, b):
    sum = a + b
    return sum

if __name__ == "__main__":
    items_list = [1, 2, 3, 4, 5]
    items_sum = sum_list(items_list)
    print("items_sum求和所得的結果為:", items_sum)

開始調(diào)試:運行上面的添加 pdb 命令的程序后,程序會停留在 pdb.set_trace() 處,并且命令行的左端由 (base) 會變成 (pdb) 提示當前進入了 pdb 調(diào)試模式。
由于 items_list 共包含 5 個元素,所以 sum_list(items) 函數(shù)中 for 循環(huán)共執(zhí)行 5 次就會得到結果并返回到主函數(shù)。

下面的過程就是將一些常用的 pdb 命令執(zhí)行的結果,博主將每行代碼的作用通過 # 功能 的形式寫在每行代碼的右側,方便大家理解。

(base) PS F:\Code\ceshi> python ./ceshi.py            # 運行當前添加了import pdb; pdb.set_trace()的程序
> f:\code\ceshi\ceshi.py(6)sum_list()
-> item = items_list[i]                               # 執(zhí)行程序知道遇到斷點時停止(此時是第1次for循環(huán)中) 
(Pdb) l                                               # l命令 列出當前文件的源代碼 
  1     # 對items的所有元素求和并返回                    # ->表示下一行將要執(zhí)行的命令即item=items_list[i],上一行已執(zhí)行完
  2     def sum_list(items):
  3         items_sum = 0
  4         for i in range(len(items_list)):
  5             import pdb; pdb.set_trace()
  6  ->         item = items_list[i]                                                 
  7             items_sum = sum_ab(items_sum, item)
  8         return items_sum
  9
 10     # 對a和b兩個元素進行求和
 11     def sum_ab(a, b):
(Pdb) n                                              # n命令 繼續(xù)運行,直到運行到當前函數(shù)的下一行(當前行item=items_list[i]已執(zhí)行完,并且->移動到下一行)
> f:\code\ceshi\ceshi.py(7)sum_list()
-> items_sum = sum_ab(items_sum, item)
(Pdb) p item                                         # p命令 打印變量item的值(第一次for循環(huán),item為=items_list[0]=1)
1
(Pdb) s                                              # s命令 運行當前行,在被調(diào)用的sum_ab(a,b)函數(shù)內(nèi)部停下
--Call--
> f:\code\ceshi\ceshi.py(11)sum_ab()
-> def sum_ab(a, b):
(Pdb) r                                              # r命令 繼續(xù)執(zhí)行代碼,直到當前函數(shù)sum_ab(a,b)返回
--Return--
> f:\code\ceshi\ceshi.py(13)sum_ab()->1
-> return sum
(Pdb) p sum                                          # p命令 打印變量sum的值(sum是sum_ab(a,b)返回的值,items_list[0]第一個元素求和的結果)
1
(Pdb) c                                              # c命令 繼續(xù)運行,僅在遇到斷點時停止(跳轉(zhuǎn)到第2次for循環(huán)中)
> f:\code\ceshi\ceshi.py(5)sum_list()
-> import pdb; pdb.set_trace()
(Pdb) c                                              # c命令 繼續(xù)運行,僅在遇到斷點時停止(跳轉(zhuǎn)到第3次for循環(huán)中)
> f:\code\ceshi\ceshi.py(6)sum_list()
-> item = items_list[i]
(Pdb) c                                              # c命令 繼續(xù)運行,僅在遇到斷點時停止(跳轉(zhuǎn)到第4次for循環(huán)中)
> f:\code\ceshi\ceshi.py(5)sum_list()
-> import pdb; pdb.set_trace()
(Pdb) c                                              # c命令 繼續(xù)運行,僅在遇到斷點時停止(跳轉(zhuǎn)到第5次for循環(huán)中)
> f:\code\ceshi\ceshi.py(6)sum_list()
-> item = items_list[i]
(Pdb) l                                              # l命令 列出當前文件的源代碼
  1     # 對items的所有元素求和并返回
  2     def sum_list(items):
  3         items_sum = 0
  4         for i in range(len(items_list)):
  5             import pdb; pdb.set_trace()
  6  ->         item = items_list[i]
  7             items_sum = sum_ab(items_sum, item)
  8         return items_sum
  9
 10     # 對a和b兩個元素進行求和
 11     def sum_ab(a, b):
(Pdb) n                                              # n命令 繼續(xù)運行,直到運行到當前函數(shù)的下一行(->移動到下一行)            
> f:\code\ceshi\ceshi.py(7)sum_list()
-> items_sum = sum_ab(items_sum, item)
(Pdb) p item                                         # p命令 打印變量item的值(第5次for循環(huán))
5
(Pdb) n                                              # n命令 繼續(xù)運行,直到運行到當前函數(shù)的下一行(->移動到下一行) 
> f:\code\ceshi\ceshi.py(4)sum_list()
-> for i in range(len(items_list)):
(Pdb) p items_sum                                    # p命令 打印變量items_sum的值(第5次for循環(huán)后:所有元素相加得到的總值)
15
(Pdb) q                                              # q
Traceback (most recent call last):
  File "F:\Code\ceshi\ceshi.py", line 17, in <module>
    items_sum = sum_list(items_list)
  File "F:\Code\ceshi\ceshi.py", line 4, in sum_list
    for i in range(len(items_list)):
  File "F:\Code\ceshi\ceshi.py", line 4, in sum_list
    for i in range(len(items_list)):
  File "D:\Tools\Anaconda3\SetUp\lib\bdb.py", line 88, in trace_dispatch
    return self.dispatch_line(frame)
  File "D:\Tools\Anaconda3\SetUp\lib\bdb.py", line 113, in dispatch_line
    if self.quitting: raise BdbQuit
bdb.BdbQuit
(base) PS F:\Code\ceshi> 

以上就是Python中斷點調(diào)試pdb包的用法詳解的詳細內(nèi)容,更多關于Python斷點調(diào)試pdb的資料請關注腳本之家其它相關文章!

相關文章

  • 一文教你向Pandas?DataFrame添加行

    一文教你向Pandas?DataFrame添加行

    這篇文章主要給大家介紹了關于如何向Pandas?DataFrame添加行的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-03-03
  • 對pandas中兩種數(shù)據(jù)類型Series和DataFrame的區(qū)別詳解

    對pandas中兩種數(shù)據(jù)類型Series和DataFrame的區(qū)別詳解

    今天小編就為大家分享一篇對pandas中兩種數(shù)據(jù)類型Series和DataFrame的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Keras設置以及獲取權重的實現(xiàn)

    Keras設置以及獲取權重的實現(xiàn)

    這篇文章主要介紹了Keras設置以及獲取權重的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • pip安裝python庫的方法總結

    pip安裝python庫的方法總結

    在本篇文章里小編給大家分享了關于使用pip安裝python庫的幾種常用方法,有需要的朋友們可以參考下。
    2019-08-08
  • python3定位并識別圖片驗證碼實現(xiàn)自動登錄功能

    python3定位并識別圖片驗證碼實現(xiàn)自動登錄功能

    這篇文章主要介紹了python3定位并識別圖片驗證碼實現(xiàn)自動登錄功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • matplotlib基礎繪圖命令之errorbar的使用

    matplotlib基礎繪圖命令之errorbar的使用

    這篇文章主要介紹了matplotlib基礎繪圖命令之errorbar的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 利用python控制Autocad:pyautocad方式

    利用python控制Autocad:pyautocad方式

    這篇文章主要介紹了利用python控制Autocad:pyautocad方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python爬蟲實戰(zhàn)項目之爬取pixiv圖片

    python爬蟲實戰(zhàn)項目之爬取pixiv圖片

    最近決定寫個P站的爬蟲,實際操作起來確實遇到了些新問題,通過解決也有所收獲,下面這篇文章主要給大家介紹了關于python爬蟲實戰(zhàn)項目之爬取pixiv圖片的相關資料,需要的朋友可以參考下
    2022-07-07
  • Python實現(xiàn)統(tǒng)計英文單詞個數(shù)及字符串分割代碼

    Python實現(xiàn)統(tǒng)計英文單詞個數(shù)及字符串分割代碼

    這篇文章主要介紹了Python實現(xiàn)統(tǒng)計英文單詞個數(shù)及字符串分割方法,本文分別給出代碼實例,需要的朋友可以參考下
    2015-05-05
  • 在cmder下安裝ipython以及環(huán)境的搭建

    在cmder下安裝ipython以及環(huán)境的搭建

    今天小編就為大家分享一篇關于在cmder下安裝ipython以及環(huán)境的搭建,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評論