pdb 基于命令行調(diào)試python

pdb基于命令行的調(diào)試工具,非常類(lèi)似gnu的gdb(調(diào)試c/c++)

命令列表

命令 簡(jiǎn)寫(xiě)命令 作用
break b 設(shè)置斷點(diǎn)
cintinue c 繼續(xù)執(zhí)行程序
list l 查看當(dāng)前行的代碼段
step s 進(jìn)入函數(shù)
return r 執(zhí)行代碼直到從當(dāng)前函數(shù)返回
quit q 終止并退出
next n 執(zhí)行下一行
print p 打印變量的值
help h 幫助
args a 參看傳入?yún)?shù)
回車(chē) 重復(fù)上一條命令
break b 顯示所有斷點(diǎn)
break lineno b lineno 在指定行設(shè)置斷點(diǎn)
break file:lineno b file:lineno 在指定文件的行設(shè)置斷點(diǎn)
clear num 刪除指定斷點(diǎn)
bt 查看函數(shù)調(diào)用棧幀

演示

  • 執(zhí)行時(shí)調(diào)試

    python -m pdb 'file_name(.py)'

    說(shuō)明:pdb 是模塊,測(cè)試代碼:

    def sum(a, b):
        result = a + b
        print('result=%d'%result)
    
    a = 100
    b = 200
    c = a + b
    
    sum(a, b)
    print(c)
    
    print('hello world')
    
    print('hello python')
    
    
  1. 正常執(zhí)行:命令 python 'file_name(.py)'

    PS C:\Users\SS沈\Desktop> python .\test01.py
    result=300
    300
    hello world
    hello python
    
  2. 調(diào)試執(zhí)行并顯示執(zhí)行代碼(每次顯示11行汪榔,本人理解柔纵,顯示多了阐枣,反而不容易查看):命令 python -m pdb 'file_name(.py)':調(diào)試佑钾、命令 l:查看當(dāng)前執(zhí)行代碼

    PS C:\Users\SS沈\Desktop> python -m pdb .\test01.py
    > c:\users\ss沈\desktop\test01.py(1)<module>()
    -> def sum(a, b):  # 表示下一步要執(zhí)行的代碼行
    (Pdb) l
      1  -> def sum(a, b):
      2         result = a + b
      3         print('result=%d'%result)
      4
      5     a = 100
      6     b = 200
      7     c = a + b
      8
      9     sum(a, b)
     10     print(c)
     11
    (Pdb) l    #命令 l (大寫(xiě)L)是顯示代碼命令
     12     print('hello world')
     13
     14     print('hello python')
    [EOF]   # 表示顯示全部代碼
    
  3. 向下執(zhí)行一行代碼:命令 n

    (Pdb) n
    > c:\users\ss沈\desktop\test01.py(5)<module>()
    -> a = 100 # -> 代表下一步要執(zhí)行的代碼
    (Pdb) l
      1     def sum(a, b):
      2         result = a + b
      3         print('result=%d'%result)
      4
      5  -> a = 100
      6     b = 200
      7     c = a + b
      8
      9     sum(a, b)
     10     print(c)
     11
    (Pdb)
    
  4. 繼續(xù)執(zhí)行代碼(就像沒(méi)有使用pdb調(diào)試一樣):命令 c

    (Pdb) c
    result=300
    300
    hello world
    hello python   # 將程序執(zhí)行完畢
    The program finished and will be restarted # 程序執(zhí)行完畢悠鞍,將重新執(zhí)行
    > c:\users\ss沈\desktop\test01.py(1)<module>()
    -> def sum(a, b):  # -》 表示下一步要執(zhí)行的代碼
    (Pdb)
    
  5. 添加斷點(diǎn)(執(zhí)行到指定行數(shù)停止):命令 b number_line

    The program finished and will be restarted
    > c:\users\ss沈\desktop\test01.py(1)<module>()
    -> def sum(a, b):
    (Pdb) b 7  # 添加一個(gè)斷點(diǎn)(在7行處)
    Breakpoint 1 at c:\users\ss沈\desktop\test01.py:7
    (Pdb) c        # 使用 c 執(zhí)行程序
    > c:\users\ss沈\desktop\test01.py(7)<module>()
    -> c = a + b
    (Pdb) l        # 顯示當(dāng)前執(zhí)行代碼
      2         result = a + b
      3         print('result=%d'%result)
      4
      5     a = 100
      6     b = 200
      7 B-> c = a + b  #程序執(zhí)行到 7 行 停止(添加斷點(diǎn)的意義)
      8
      9     sum(a, b)
     10     print(c)
     11
     12     print('hello world')
    (Pdb)
    

    說(shuō)明:添加斷點(diǎn)的意義弓坞,就是想針對(duì)查看某行的代碼執(zhí)行過(guò)程

  6. 查看斷定:命令 b

    (Pdb) b        # 查看斷點(diǎn)
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:7    # 第一個(gè)斷點(diǎn)是‘文件’的第7行
            breakpoint already hit 1 time
    (Pdb) b 9  # 將第9行添加一個(gè)斷點(diǎn)
    Breakpoint 2 at c:\users\ss沈\desktop\test01.py:9
    (Pdb) c        # 執(zhí)行
    > c:\users\ss沈\desktop\test01.py(9)<module>()
    -> sum(a, b)
    (Pdb) l        # 顯示當(dāng)前執(zhí)行代碼
      4
      5     a = 100
      6     b = 200
      7 B   c = a + b
      8
      9 B-> sum(a, b)  # -> 表示下一步執(zhí)行的代碼
     10     print(c)
     11
     12     print('hello world')
     13
     14     print('hello python')
    (Pdb) b
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:7
            breakpoint already hit 1 time
    2   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:9    # 第二個(gè)斷點(diǎn)是第9行
            breakpoint already hit 1 time
    (Pdb)
    
  7. 清除斷點(diǎn):命令:clear num

    (Pdb) b
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:7
            breakpoint already hit 1 time
    2   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:9
            breakpoint already hit 1 time
    (Pdb) clear 1  # 清除斷點(diǎn) 1
    Deleted breakpoint 1 at c:\users\ss沈\desktop\test01.py:7
    (Pdb) b        # 顯示斷點(diǎn)
    Num Type         Disp Enb   Where
    2   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:9    # 斷點(diǎn) 1 被刪除
            breakpoint already hit 1 time
    (Pdb)
    
  8. 進(jìn)入函數(shù)執(zhí)行(在使用命令:n 時(shí),調(diào)用函數(shù)是當(dāng)作一行語(yǔ)句來(lái)執(zhí)行的):命令 s

    (Pdb) b    # 查看斷點(diǎn)
    Num Type         Disp Enb   Where
    1   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:7
    2   breakpoint   keep yes   at c:\users\ss沈\desktop\test01.py:9
    (Pdb) clear 1  # 清除斷點(diǎn) 1
    Deleted breakpoint 1 at c:\users\ss沈\desktop\test01.py:7
    (Pdb) c    # 執(zhí)行程序拉宗,沒(méi)有斷點(diǎn)一次性執(zhí)行完畢峦树,如有斷點(diǎn),再斷點(diǎn)處停止
    > c:\users\ss沈\desktop\test01.py(9)<module>()
    -> sum(a, b)   # 當(dāng)前下一步要執(zhí)行的程序
    (Pdb) l        # 查看當(dāng)前執(zhí)行代碼
      4
      5     a = 100
      6     b = 200
      7     c = a + b
      8
      9 B-> sum(a, b)  # 斷點(diǎn) -> 表示在此斷點(diǎn)停止執(zhí)行
     10     print(c)
     11
     12     print('hello world')
     13
     14     print('hello python')
    (Pdb) s    # 進(jìn)入函數(shù)執(zhí)行代碼
    --Call--   # 調(diào)用函數(shù)
    > c:\users\ss沈\desktop\test01.py(1)sum()
    -> def sum(a, b):  # 回到函數(shù)定義語(yǔ)句旦事,可直觀查看函數(shù)執(zhí)行
    (Pdb) l
      1  -> def sum(a, b):
      2         result = a + b
      3         print('result=%d'%result)
      4
      5     a = 100
      6     b = 200
      7     c = a + b
      8
      9 B   sum(a, b)
     10     print(c)
     11
    (Pdb) p a  # 查看傳入函數(shù)的參數(shù):查看參數(shù) a (print 打涌)
    100
    (Pdb) p b  # 查看參數(shù) b
    200
    (Pdb) a    # 查看所有參數(shù)(args)
    a = 100
    b = 200
    (Pdb)
    
  9. 進(jìn)入函數(shù)的執(zhí)行步驟:

    (Pdb) n    # n 的作用沒(méi)有改變,每次執(zhí)行一行
    > c:\users\ss沈\desktop\test01.py(3)sum()
    -> print('result=%d'%result) # 當(dāng)前下一步要執(zhí)行的代碼
    (Pdb) l
      1     def sum(a, b):
      2         result = a + b
      3  ->     print('result=%d'%result) # 執(zhí)行下一步要執(zhí)行的代碼
      4
      5     a = 100
      6     b = 200
      7     c = a + b
      8
      9 B   sum(a, b)
     10     print(c)
     11
    (Pdb) p result     # 打印參數(shù) result
    300
    (Pdb) n
    result=300
    --Return--     # 表示函數(shù)執(zhí)行結(jié)束姐浮,有返回值就返回
    > c:\users\ss沈\desktop\test01.py(3)sum()->None
    -> print('result=%d'%result)   # 沒(méi)有仔細(xì)測(cè)試谷遂,感覺(jué)就是函數(shù)的最后一行
    (Pdb) n
    > c:\users\ss沈\desktop\test01.py(10)<module>()
    -> print(c)    # 下一步要執(zhí)行的代碼
    (Pdb) l
      5     a = 100
      6     b = 200
      7     c = a + b
      8
      9 B   sum(a, b)
     10  -> print(c)
     11
     12     print('hello world')
     13
     14     print('hello python')
    [EOF]
    (Pdb)
    
  10. 快速執(zhí)行到函數(shù)最后一行:命令 r

    (Pdb) s   # 進(jìn)入函數(shù)執(zhí)行命令
    --Call--
    > c:\users\ss沈\desktop\test01.py(1)sum()
    -> def sum(a, b):
    (Pdb) l
      1  -> def sum(a, b):
      2         result = a + b
      3         print('result=%d'%result)
      4
      5     a = 100
      6     b = 200
      7     c = a + b
      8
      9 B   sum(a, b)
     10     print(c)
     11
    (Pdb) r   # 快速執(zhí)行導(dǎo)函數(shù)最后一行
    result=300
    --Return--    # 表示函數(shù)執(zhí)行結(jié)束
    > c:\users\ss沈\desktop\test01.py(3)sum()->None
    -> print('result=%d'%result)
    (Pdb) n
    > c:\users\ss沈\desktop\test01.py(10)<module>()
    -> print(c)
    (Pdb)
    
  11. 退出調(diào)試:命令 q

    (Pdb) q
    PS C:\Users\SS沈\Desktop>
    
  • 交互式調(diào)用

    1. 進(jìn)入python或ipython解釋器

      >>> def sum(a, b):
         result = a + b
         print('result=%d'%result)
         return result
      
      >>> import pdb     # 導(dǎo)入pdb模塊
      >>> pdb.run('sum(3, 5)')   # 調(diào)試函數(shù),參數(shù)賦值
      > <string>(1)<module>()
      (Pdb) s    # 使用 s 待用函數(shù)
      --Call--
      > <pyshell#12>(1)sum()
      (Pdb)
      

      說(shuō)明:命令與上面相同卖鲤,本人理解就是一個(gè)函數(shù)的調(diào)試肾扰,完全可以使用上面進(jìn)行調(diào)試

  • 程序里埋點(diǎn)

    說(shuō)明:導(dǎo)入 import pdb 在斷點(diǎn)處寫(xiě)入 pdb.set_track() 。在 sum(a, b) 處加入斷點(diǎn)蛋逾,程序遇到 pdb.set_trace 就進(jìn)入調(diào)試模式

    import pdb
    
    
    def sum(a, b):
        result = a + b
        print('result=%d'%result)
    
    a = 100
    b = 200
    c = a + b
    
    # 添加斷點(diǎn)
    pdb.set_trace()
    
    sum(a, b)
    print(c)
    
    print('hello world')
    
    print('hello python')
    
    
    1. 演示

      > c:\users\ss沈\desktop\ten\爬蟲(chóng)\test02.py(15)<module>()
      -> sum(a, b)
      (Pdb) l
       10     c = a + b
       11
       12     # 添加斷點(diǎn)
       13     pdb.set_trace()
       14
       15  -> sum(a, b)
       16     print(c)
       17
       18     print('hello world')
       19
       20     print('hello python')
      (Pdb) s
      --Call--
      > c:\users\ss沈\desktop\ten\爬蟲(chóng)\test02.py(4)sum()
      -> def sum(a, b):
      (Pdb)
      

      說(shuō)明:其他命令和上面一樣

  • 日志調(diào)試

    待續(xù)-----------

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末集晚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子区匣,更是在濱河造成了極大的恐慌偷拔,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亏钩,死亡現(xiàn)場(chǎng)離奇詭異莲绰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)铸屉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)钉蒲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)切端,“玉大人彻坛,你說(shuō)我怎么就攤上這事√ぴ妫” “怎么了昌屉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)茵瀑。 經(jīng)常有香客問(wèn)我间驮,道長(zhǎng),這世上最難降的妖魔是什么马昨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任竞帽,我火速辦了婚禮扛施,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屹篓。我一直安慰自己疙渣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布堆巧。 她就那樣靜靜地躺著妄荔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谍肤。 梳的紋絲不亂的頭發(fā)上啦租,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音荒揣,去河邊找鬼篷角。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乳附,可吹牛的內(nèi)容都是我干的内地。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赋除,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阱缓!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起举农,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荆针,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后颁糟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體航背,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年棱貌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玖媚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婚脱,死狀恐怖今魔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情障贸,我是刑警寧澤错森,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站篮洁,受9級(jí)特大地震影響涩维,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袁波,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一瓦阐、第九天 我趴在偏房一處隱蔽的房頂上張望蜗侈。 院中可真熱鬧,春花似錦睡蟋、人聲如沸宛篇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)叫倍。三九已至,卻和暖如春豺瘤,著一層夾襖步出監(jiān)牢的瞬間吆倦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工坐求, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚕泽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓桥嗤,卻偏偏與公主長(zhǎng)得像须妻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泛领,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 寫(xiě)在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 2,766評(píng)論 0 8
  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類(lèi)型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,349評(píng)論 0 2
  • 1. Python的hello-world: print ("Hello, Python!")荒吏、 完了 搖就完事兒...
    LunarShade閱讀 1,399評(píng)論 0 0
  • python自帶的pdb庫(kù),可以實(shí)現(xiàn)簡(jiǎn)單的調(diào)試功能渊鞋,基本命令與gdb類(lèi)似绰更,pdb主要支持多斷點(diǎn)設(shè)置(可條件設(shè)置),...
    mysimplebook閱讀 740評(píng)論 0 0
  • 目標(biāo):3個(gè)月?lián)碛忻罎M的伴侶關(guān)系 動(dòng)機(jī):能夠讓父母安心锡宋,成長(zhǎng)為榜樣儡湾,讓更多的人擁有美滿的伴侶關(guān)系,影響更多的人學(xué)習(xí)種...
    空空dj閱讀 149評(píng)論 0 0