pdb 調試 python 代碼

pdb

python的官方調試工具; 默認下載的模塊

參考文檔

  • pdb
  • pdb有官方文檔, 也有源碼, 可能閱讀python源碼更容易理解;

gdb非常相似,也支持擴展; 基于bdb,cmd拓展;

代碼中設置調試點(一次性調試)

好處是可以源碼級別的調試, 對于剛了解pdb又想調試子進程的比較友好;

pdb模塊顯式調用進入調試

即源碼級別的支持; gdb目前無法做到;

# 在想要調試前的位置設置斷點
import pdb; pdb.set_trace()

breakpoint內置函數也可以:更推薦, 不用import pdb, 但這是一次性調試, 需要手動指定左右的點, 一般要在最開始加;

從頭調試:強烈推薦

格式

python -m pdb myscript.py

說明

import pdb; breakpoint并非是非此即彼, 水火不容的關系, 建議結合使用效果更佳;

調試指令說明

  • 全稱和縮寫(常用): 縮寫有單個字母或兩個字母; h(elp)
  • 指令補全(常用): 指令可以補全;
  • 空白行(常用): 重復執行上一條,list指令特殊;
  • 非法指令: 當成python腳本解析(不推薦這種);
  • 執行腳本(常用): 后面的內容強行當成python腳本執行, 交互式的執行一些函數;
  • 執行多條pdb指令: ;;進行分隔兩個指令, string也會影響, 建議拆分';'';'(解析器不夠智能?); ;不合法, 且不補全, 不推薦;
  • .pdbrc : 配置

h(elp) [command]

  • 未指定[command]參數, 輸出pdb支持指令
  • 指定[command]參數, 輸出參數幫助文檔;
(Pdb) helpDocumented commands (type help <topic>):
========================================
EOF    c          d        h         list      q        rv       undisplay
a      cl         debug    help      ll        quit     s        unt      
alias  clear      disable  ignore    longlist  r        source   until    
args   commands   display  interact  n         restart  step     up       
b      condition  down     j         next      return   tbreak   w        
break  cont       enable   jump      p         retval   u        whatis   
bt     continue   exit     l         pp        run      unalias  where    Miscellaneous help topics:
==========================
exec  pdb(Pdb) help c
c(ont(inue))Continue execution, only stop when a breakpoint is encountered.
  • 也可以使用!help(xxx)查看函數或類之類; (python內置help指令)

堆棧操作

w[here], bt: 輸出當前棧, >表示當前棧幀

(Pdb) bt/usr/lib/python3.10/bdb.py(597)run()
-> exec(cmd, globals, locals)<string>(1)<module>()
> /home/ch/ch/pyfile/debug/test.py(2)<module>()
-> re.match("xxx", "")
(Pdb) where/usr/lib/python3.10/bdb.py(597)run()
-> exec(cmd, globals, locals)<string>(1)<module>()
> /home/ch/ch/pyfile/debug/test.py(2)<module>()
-> re.match("xxx", "")

調整棧幀:d(own) [count]

向下移動棧幀; [count]表示移動數量, 未指定默認用1;

調整棧幀:u(p) [count]

向上移動棧幀; [count]表示移動數量, 未指定默認用1;

棧幀移動: gdb則是用f num的形式移動到指定

斷點操作

斷點設置: b(reak) [([filename:]lineno | function) [, condition]]

  • tb(reak) [([filename:]lineno | function) [, condition]]
  • 一次性斷點: b(reak)永久, tbreak一次性;
  • [filename:]lineno: 行級別指定斷點, 可以指定文件, 否則以當前文件為準; 從sys.path目錄下搜索
  • function: 函數, 這種需要import了之后才可以生效;
  • condition: 表達式為True的時候才會中斷;

刪除斷點: cl(ear) [filename:lineno | bpnumber ...]

  • 無參數清理所有
  • filename:lineno: 清理所在行的所有斷點;
  • bpnumber ...: 空格分隔, 刪除對應編號的斷點; b查看;

禁用斷點: disable bpnumber [bpnumber ...]

禁用指定編號的斷點(同時指定多個), 可用b指令查看所有;

啟動斷點: enable bpnumber [bpnumber ...]

啟用指定編號的斷點(同時指定多個), 可用b指令查看所有;

跳過斷點: ignore bpnumber [count]

  • 忽略某個斷點count,未指定默認0次, 即指令就像未生效; 可用b指令查看所有;

對某個斷點添加觸發條件: condition bpnumber [condition]

  • 添加bool表達式, 用于判斷斷點是否觸發;
  • 無條件則表示刪除;

斷點觸發時執行額外指令: commands [bpnumber]

  • 對指定bpnumber或剛才指定的斷點添加額外指令; end結束;
  • 刪除則相當于添加新的, 但是空;
  • silent則不輸出斷點信息;
(Pdb) commands 1
(com) p some_variable
(com) end
(Pdb)
  • commands中有一下任意一個都恢復執行, 就好像同時加了command, end: continue, step, next, return, jump, quit and their abbreviations;

調試代碼

下一條指令: s(tep)遇到函數就跳到函數里, 否則就下一條指令;

下一條和下一行有很大區別;

下一行指令: n(ext)一行有多個指令也下一行

unt(il) [lineno]: 一直執行直到, 中間有斷點也停止;

until有點類似一次性斷點;

r(eturn)

執行完當前函數后, 返回并暫停調試;

c(ont(inue))

恢復執行

j(ump) lineno: 同一幀的跳轉, 類似c goto;

直接跳轉到指定行執行; 可以往回, 也可以往后;

調試時查看源碼

l(ist) [first[, last]]

  • 無參: 當前行往后11行, 累加;
  • first: .當前往后11行; 或者指定行后11行;
  • first, last: 輸出區間的代碼

->: 表示當前行;
>>: 異常拋出位置;

ll | longlist

當前函數或當前棧幀的所有代碼;

變量查看

a(rgs): 當前函數參數

(Pdb) b re.match
Breakpoint 1 at /usr/lib/python3.10/re.py:187
(Pdb) c
> /usr/lib/python3.10/re.py(190)match()
-> return _compile(pattern, flags).match(string)
(Pdb) a
pattern = 'xxx'
string = ''
flags = 0

p expression, pp expression

指定表達式值, 類似print(expression)

whatis expression

輸出表達式類型, 表達式可以是一個變量, 也可以是函數執行返回類型;

source expression

查看表達式源碼定義;

display [expression]

每次執行, 查看值的前后變化;

retval:查看函數上次返回值;

interact

進入交互式, 即成當前上下文;

q(uit)

退出整個程序

指令操作

alias [name [command]]: 別名

unalias name: 取消別名

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213990.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大語言模型有什么意義?亞馬遜訓練自己的大語言模型有什么用?

近年來&#xff0c;大語言模型的嶄露頭角引起了廣泛的關注&#xff0c;成為科技領域的一項重要突破。而在這個領域的巔峰之上&#xff0c;亞馬遜云科技一直致力于推動人工智能的發展。那么&#xff0c;作為一家全球科技巨頭&#xff0c;亞馬遜為何會如此注重大語言模型的研發與…

解讀 | GPT-4突然“變賴“ 是莫名其妙還是另有玄機

大家好&#xff0c;我是極智視界&#xff0c;歡迎關注我的公眾號&#xff0c;獲取我的更多前沿科技分享 邀您加入我的知識星球「極智視界」&#xff0c;星球內有超多好玩的項目實戰源碼和資源下載&#xff0c;鏈接&#xff1a;https://t.zsxq.com/0aiNxERDq 事情是這樣的&#…

初學websocket有感-待研究

https://www.bilibili.com/video/BV1KN411n7WD/ 看到一半的時候就會想到以下的問題&#xff1a; 初學websocket有感-待研究 既然每一個endPoint都是對應著一個服務器和客戶端瀏覽器的連接對象&#xff0c;那么就是說要創建很多個endPoint對象咯。 一、是否回將創建的這么多…

項目經理和產品經理哪個更有發展前景?

如果是單看“錢途”的話&#xff0c;如果是在傳統行業&#xff0c;可能差不多&#xff1b;如果是在IT行業的話&#xff0c;可能更需要項目經理&#xff1b;互聯網行業的話&#xff0c;可能更需要產品經理。 項目經理跟產品經理兩個證都挺受市場歡迎的&#xff0c;兩個崗位職責…

關東升老師Python著作推薦(由電子工業出版社出版)

前言&#xff1a;關東升老師簡單介紹 一個在IT領域摸爬滾打20多年的老程序員、軟件架構師、高級培訓講師、IT作家。熟悉Java、Kotlin、Python、iOS、Android、游戲開發、數據庫開發與設計、軟件架構設計等多種IT技術。參與設計和開發北京市公交一卡通百億級大型項目&#xff0c…

釣魚網站域名識別工具dnstwist算法研究

先上一個AI的回答&#xff1a; dnstwist是一種釣魚網站域名識別工具&#xff0c;可幫助用戶識別和檢測可能被惡意使用的域名。它通過生成類似的域名變體來模擬攻擊者可能使用的釣魚域名&#xff0c;并提供了一系列有用的功能和信息。 dnstwist能夠生成一組類似的域名變體&…

HTML常見的列表標簽

目錄 &#x1f367;無序列表&#x1f367;有序列表&#x1f367; 定義列表&#x1f367; 菜單列表 &#x1f367;無序列表 ulli的組合,ul標簽與li標簽之間盡量不要寫標簽或內容 列表可以嵌套多層 type屬性&#xff0c;可以指定序號的類型 可選值&#xff1a;默認值&#xff0c;…

15:00面試,15:06就出來了,問的問題太變態了。。

剛從小廠出來&#xff0c;沒想到在另一家公司我又寄了。 在這家公司上班&#xff0c;每天都要加班&#xff0c;但看在錢給的比較多的份上&#xff0c;也就不太計較了。但萬萬沒想到5月一紙通知&#xff0c;所有人不準加班了&#xff0c;不僅加班費沒有了&#xff0c;薪資還要降…

有病但合理的 ChatGPT 提示語

ChatGPT 面世一年多了&#xff0c;如何讓大模型輸出高質量內容&#xff0c;讓提示詞工程成了一門重要的學科。以下是一些有病但合理的提示詞技巧&#xff0c;大部分經過論文證明&#xff0c;有效提高 ChatGPT 輸出質量&#xff1a; ?1?? Take a deep breath. 深呼吸 ? 作用…

ChatGPT勝過我們人類嗎?

引言 人工智能&#xff08;AI&#xff09;一直是眾多技術進步背后的驅動力&#xff0c;推動我們走向曾經是科幻小說領域的未來。這些進步的核心引出這樣一個深刻的問題&#xff1a;機器能思考嗎&#xff1f;這一問題由英國數學家和計算機科學家艾倫圖靈&#xff08;Alan Turin…

SSL安全證書怎么查看證書類型?

SSL安全證書是一種用于確保互聯網通信安全的協議。它通過加密數據傳輸以保護敏感信息不被竊取或篡改。在瀏覽器中&#xff0c;我們可以輕松查看SSL安全證書的類型。本文將詳細介紹如何查看證書類型&#xff0c;并探討不同類型的SSL證書的用途和特點。 要查看SSL安全證書的類型&…

關于粒子群算法的一些簡單嘗試

粒子群算法核心思想&#xff1a;&#xff08;鳥 粒子&#xff09; &#xff08;1&#xff09;許多的鳥站在不同的地方&#xff1b; &#xff08;2&#xff09;每一只鳥都有自己尋找食物的初始飛行方向、飛行速度&#xff1b; &#xff08;3&#xff09;這些鳥兒每隔一段時間…

ISP-EE(Edge Enhance)

ISP-EE(Edge Enhance) EE模塊在某些ISP主控中叫做sharpness或者sharpen&#xff0c;這些名稱指代的模塊是同一個&#xff0c;不用再糾結。主要就是在YUV域內彌補成像過程中圖像的銳度損失&#xff0c;對邊緣和細節進行加強&#xff0c;從而恢復場景本應具有的自然銳度。 銳度…

Linux基礎指令(2)

今天我們繼續來學我們有關于Linux的指令&#xff0c;今天的指令要比上次多多了。開始我們的學習吧。 man手冊 先來看標題&#xff0c;手冊我們第一時間想到的就是手冊的查閱功能&#xff0c;我們都知道在我們上小學的時候&#xff0c;如果遇到不會的字&#xff0c;我們會通過…

網絡工程師【目錄】

前言 從2023年下半年開始&#xff0c;所有的軟考全面改革&#xff0c;由原來的筆試改為機考&#xff0c;據說難度會有一些增加&#xff0c;望悉知。 報名地址&#xff1a;中國計算機技術職業資格網 歷史報名時間和考試時間&#xff1a;3月份報名&#xff0c;5月底考試&#xf…

互聯網商業史--1.3Q大戰

一.起因 奇虎360與騰訊間的糾葛被業界形象地稱為“3Q大戰”。 這場大戰源于雙方之間的“互掐”。 雙方為了各自利益&#xff0c;從2010年到2014年&#xff0c;上演了一系列互聯網之戰&#xff0c;并走上訴訟之路 騰訊先是推出QQ醫生1.0&#xff0c;隨后推出QQ醫生3.2&#x…

【wvp】無響應sip 日志記錄

23-12-11 17:25:18.179 [https-jsse-nio-8970-exec-7] INFO c.g.wvp.vmp.gb28181.transmit.cmd.impl.SIPCommander - 34010200001130000006_34010200001310000006 分配的ZLM為: wvpmediaserver001 [10.30.2.8:30406] 2023-12-11 17:25:18.337 [wvp-9] INFO c.g.w.v.g.t.e.r.i…

【高數:3 無窮小與無窮大】

【高數&#xff1a;3 無窮小與無窮大】 1 無窮小與無窮大2 極限運算法則3 極限存在原則4 趨于無窮小的比較 參考書籍&#xff1a;畢文斌, 毛悅悅. Python漫游數學王國[M]. 北京&#xff1a;清華大學出版社&#xff0c;2022. 1 無窮小與無窮大 無窮大在sympy中用兩個字母o表示無…

IvorySQL榮獲 OSCHINA「2023 年度優秀開源技術團隊」獎

2023 年&#xff0c;OSCHINA 綜合平臺上各大認證官方技術團隊、開源社區帳號年度發表的內容深度及廣度、開展各種活動運營影響力等多方面的表現&#xff0c;瀚高股份IvorySQL榮獲 OSCHINA頒布的「2023 年度優秀開源技術團隊」獎項。未來&#xff0c;IvorySQL將繼續為國內開源事…

golang游戲服務器 - tgf系列課程04

用戶登錄 介紹了如何使用tgf自帶的登錄功能進行用戶的登錄操作,并且編寫機器人客戶端的一個模擬請求代碼需求描述 用戶請求登錄,登錄成功之后請求HelloWorld接口.Common 接口定義和生成接口定義 新增登錄接口 type IHallService interface {Login(ctx context.Context, args…