最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中斷點調試pdb包的用法詳解

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

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

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

安裝及使用方法

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

pip install pdb

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

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

pdb 常用命令

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

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

調試代碼示例

下面是一個簡單的對 list 的列表 items_list 中所有元素求和并返回的代碼示例,為了通過示例進行演示,博主將 list 中元素求和寫在 sum_list(items) 函數中,并將兩元素相加(+)又寫成了一個函數 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) 函數中添加調試 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)

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

下面的過程就是將一些常用的 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ù)運行,直到運行到當前函數的下一行(當前行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命令 運行當前行,在被調用的sum_ab(a,b)函數內部停下
--Call--
> f:\code\ceshi\ceshi.py(11)sum_ab()
-> def sum_ab(a, b):
(Pdb) r                                              # r命令 繼續(xù)執(zhí)行代碼,直到當前函數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ù)運行,僅在遇到斷點時停止(跳轉到第2次for循環(huán)中)
> f:\code\ceshi\ceshi.py(5)sum_list()
-> import pdb; pdb.set_trace()
(Pdb) c                                              # c命令 繼續(xù)運行,僅在遇到斷點時停止(跳轉到第3次for循環(huán)中)
> f:\code\ceshi\ceshi.py(6)sum_list()
-> item = items_list[i]
(Pdb) c                                              # c命令 繼續(xù)運行,僅在遇到斷點時停止(跳轉到第4次for循環(huán)中)
> f:\code\ceshi\ceshi.py(5)sum_list()
-> import pdb; pdb.set_trace()
(Pdb) c                                              # c命令 繼續(xù)運行,僅在遇到斷點時停止(跳轉到第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ù)運行,直到運行到當前函數的下一行(->移動到下一行)            
> 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ù)運行,直到運行到當前函數的下一行(->移動到下一行) 
> 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中斷點調試pdb包的用法詳解的詳細內容,更多關于Python斷點調試pdb的資料請關注腳本之家其它相關文章!

相關文章

  • python中pygame安裝不成功的解決辦法

    python中pygame安裝不成功的解決辦法

    盡管網上搜到許多篇關于pycharm如何安裝pygame庫,但是跟著要求做還是安裝失敗,下面這篇文章主要給大家介紹了關于python中pygame安裝不成功的解決辦法,需要的朋友可以參考下
    2023-05-05
  • python matplotlib實現雙Y軸的實例

    python matplotlib實現雙Y軸的實例

    今天小編就為大家分享一篇python matplotlib實現雙Y軸的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python函數基礎(定義函數、函數參數、匿名函數)

    Python函數基礎(定義函數、函數參數、匿名函數)

    這篇文章介紹了Python函數的基礎用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 一文深入理解Python的對象模型

    一文深入理解Python的對象模型

    Python程序中的所有數據都由對象或對象之間的關系表示,下面這篇文章主要介紹了Python對象模型的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-01-01
  • 將Python應用部署到生產環(huán)境的小技巧分享

    將Python應用部署到生產環(huán)境的小技巧分享

    文章主要講述了在將Python應用程序部署到生產環(huán)境之前,需要進行的準備工作和最佳實踐,包括心態(tài)調整、代碼審查、測試覆蓋率提升、配置文件優(yōu)化、日志記錄完善、文檔更新、環(huán)境搭建、自動化流水線、性能調優(yōu)、監(jiān)控與告警、安全加固以及故障恢復
    2025-01-01
  • matplotlib階梯圖的實現(step())

    matplotlib階梯圖的實現(step())

    這篇文章主要介紹了matplotlib階梯圖的實現(step()),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python如何實現強制數據類型轉換

    Python如何實現強制數據類型轉換

    這篇文章主要介紹了Python如何實現強制數據類型轉換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Python中隱藏的五種實用技巧分享

    Python中隱藏的五種實用技巧分享

    這篇文章主要和大家分享五個Python中隱藏的實用技巧,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,感興趣的小伙伴可以學習一下
    2022-05-05
  • Python腳本實現Web漏洞掃描工具

    Python腳本實現Web漏洞掃描工具

    這是去年畢設做的一個Web漏洞掃描小工具,主要針對簡單的SQL注入漏洞、SQL盲注和XSS漏洞。下文給大家介紹了使用說明和源代碼,一起看看吧
    2016-10-10
  • 如何用Python實現簡單的Markdown轉換器

    如何用Python實現簡單的Markdown轉換器

    這篇文章主要介紹了如何用Python實現簡單的Markdown轉換器,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論

万州区| 惠州市| 油尖旺区| 积石山| 大冶市| 伊川县| 鲁甸县| 广元市| 民丰县| 遵义市| 萍乡市| 临海市| 绥化市| 浦东新区| 左云县| 刚察县| 刚察县| 蓬莱市| 普格县| 永济市| 新郑市| 高碑店市| 那坡县| 东方市| 固阳县| 东辽县| 繁昌县| 永修县| 平和县| 柘荣县| 长丰县| 桦甸市| 报价| 泽库县| 大邑县| 嘉禾县| 绥芬河市| 晋中市| 乃东县| 梁山县| 丰镇市|