成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Pdb調(diào)試Python

codeGoogle / 808人閱讀

摘要:簡(jiǎn)單介紹自帶庫(kù),使用調(diào)試程序還是很方便的。比如下圖就是展示斷點(diǎn)進(jìn)入到內(nèi)部之后,打印的參數(shù),打印某個(gè)變量退出調(diào)試,直接退出調(diào)試或者使用的方式退出最后說(shuō)一句上面展示的使用調(diào)試的過程其實(shí)是很簡(jiǎn)單的,文章中主要通過截圖展示運(yùn)行的效果。

簡(jiǎn)單介紹

Python自帶 Pdb庫(kù),使用 Pdb調(diào)試 Python程序還是很方便的。但是遠(yuǎn)程調(diào)試、多線程,Pdb是搞不定的

本文參考的相關(guān)文章如下:

《指針和字符串和字符串常量、用gdb來(lái)獲取非法內(nèi)存中的內(nèi)容》

《Linux gdb調(diào)試器用法全面解析》

《用PDB庫(kù)調(diào)試Python程序》

用Pdb調(diào)試有多種方式

使用 Pdb調(diào)試 Python的程序的方式主要是下面的三種!下面逐一介紹

命令行加-m參數(shù)

命令行啟動(dòng)目標(biāo)程序,加上-m參數(shù),這樣調(diào)用 testPdb.py的話斷點(diǎn)就是程序執(zhí)行的第一行之前

本文接下來(lái)重點(diǎn)講到的實(shí)例展示就是使用這種方式進(jìn)行調(diào)試的!

python -m pdb testPdb.py
在python交互環(huán)境調(diào)試
>>> import pdb
>>> import testPdb
>>> pdb.run("testPdb.test()")
代碼中插入一段程序

比較常用的,就是在程序中間插入一段程序,相對(duì)于在一般 IDE 里面打上斷點(diǎn)然后啟動(dòng) debug,不過這種方式是 hardcode的

if __name__ == "__main__":
  a = 1
  import pdb
  pdb.set_trace()
  b = 2
  c = a + b
  print(c)

然后正常運(yùn)行腳本:python testPdb.py 到了 pdb.set_trace()那里就會(huì)定下來(lái),然后就可以看到調(diào)試的提示符 (Pdb)了

針對(duì)上面的這段小程序的調(diào)試情況如下:

準(zhǔn)備測(cè)試程序

接下來(lái)使用上面介紹的第一種方式來(lái)調(diào)試 Python程序,以此來(lái)介紹 pdb常用的命令,不過在開始之前先要準(zhǔn)備好測(cè)試的程序代碼:

testFun.py

這是一個(gè)會(huì)被主模塊調(diào)用的子模塊,用于測(cè)試使用 Pdb調(diào)試的時(shí)候,是不是可以斷點(diǎn)從主模塊跟蹤進(jìn)入子模塊(后續(xù)有說(shuō)明)

#!/usr/bin/python
# -*- coding: utf-8 -*-

def add(a, b):
    return a + b
testPdb.py

這是下面被調(diào)試的主模塊的代碼

#!/usr/bin/python
# -*- coding: utf-8 -*-

def sub(a, b):
    return a - b

if __name__ == "__main__":

    print ""
    import testFun
    i = 0
    a = 1
    while(i < 100):
        a = testFun.add(a, 1)
        i = i + 1
    print "累加結(jié)果:", a
    print ""

    for letter in "Pdb":
        print "當(dāng)前字母:", letter
    print ""

    fruits = ["banana", "apple", "mango"]
    for fruit in fruits:
        print "當(dāng)前水果:", fruit
    print ""


    ret = 0
    for num in range(10, 12):
        ret = sub(ret, num)
    print "循環(huán)結(jié)果:", ret
    print ""

    d = {"abc": 123, 123: "abc"}
    for (k,v) in d.items():
        print "當(dāng)前鍵值對(duì):", k, "-", v
    print ""
總結(jié)常用的命令 基礎(chǔ)命令

h(elp)命令:會(huì)打印當(dāng)前版本 Pdb可用的命令,如果要查詢某個(gè)命令,可輸入 h [command] ,例如 h l 查看 list命令

l(ist)命令:可以列出當(dāng)前將要運(yùn)行的代碼塊

斷點(diǎn)管理

b(reak):設(shè)置斷點(diǎn)

比如 b 12 就是在當(dāng)前腳本的第 9行加上斷點(diǎn)

比如 b sub 就是在當(dāng)前腳本的 sub函數(shù)定義處加斷點(diǎn)

除了可以在當(dāng)前的腳本中添加斷點(diǎn)之外,還可以在當(dāng)前腳本對(duì)其他腳本下斷點(diǎn),以上面用到的代碼為例 b testFun.add 就可以實(shí)現(xiàn)在 testFun.py腳本中的 add函數(shù)處加斷點(diǎn)

如果只用 b 就會(huì)顯示現(xiàn)有的全部斷點(diǎn)

condition bpnumber [condition]:設(shè)置條件斷點(diǎn),比如 condition 2 a==0 ,就是在第二個(gè)斷點(diǎn)出加條件 “a==0”

cl(ear):刪除斷點(diǎn),如果后面帶有參數(shù),就是清楚指定的斷點(diǎn);如果不帶參數(shù)就是清除所有的斷點(diǎn)

disable/enable:禁用/激活斷點(diǎn)

程序邏輯控制

下面展示的幾個(gè)命令,需要知道對(duì)應(yīng)的腳本的代碼和行號(hào),所以這里先截圖展示下面測(cè)試需要用到的前幾行代碼

c(ont(inue)),讓程序正常運(yùn)行,直到遇到下一個(gè)斷點(diǎn)

n(ext),讓程序運(yùn)行下一行,如果當(dāng)前語(yǔ)句有一個(gè)函數(shù)調(diào)用,用n是不會(huì)進(jìn)入被調(diào)用的函數(shù)體中的

下圖中展示的,當(dāng)對(duì)腳本斷點(diǎn)調(diào)試到 testFun.add(a, 1)時(shí),繼續(xù)執(zhí)行n,并不會(huì)進(jìn)入 testFun.add(a, 1)的函數(shù)內(nèi)部

s(tep),跟n相似,但如果當(dāng)前有一個(gè)函數(shù)調(diào)用,那么 s會(huì)進(jìn)入被調(diào)用的函數(shù)體中

下圖中展示的,當(dāng)對(duì)腳本斷點(diǎn)調(diào)試到 testFun.add(a, 1)時(shí),繼續(xù)執(zhí)行s,會(huì)進(jìn)入 testFun.add(a, 1)對(duì)應(yīng)的函數(shù)定義內(nèi)部,雖然 testFun.add不是本腳本中定義的函數(shù)

j(ump),讓程序跳轉(zhuǎn)到指定的行數(shù)

假如當(dāng)前所在行是 10,注意:假如執(zhí)行了 j 20 之后,那么相當(dāng)于程序直接跳到 20行,中間的 11~19行其實(shí)就直接跳過去根本沒有被執(zhí)行到,所以如果這段代碼中有變量的聲明或?qū)ο蟮某跏蓟枰?20行及之后被用到,那么等到用到的時(shí)候就可能導(dǎo)致報(bào)錯(cuò)!

打印重要信息

a(rgs),打印當(dāng)前函數(shù)的參數(shù)。比如下圖就是展示斷點(diǎn)進(jìn)入到 testFun.add內(nèi)部之后,打印 testFun.add的參數(shù)

p,打印某個(gè)變量

退出調(diào)試

q,直接退出調(diào)試;或者使用 Ctrl+D的方式退出

最后說(shuō)一句

上面展示的使用 Pdb調(diào)試的過程其實(shí)是很簡(jiǎn)單的,文章中主要通過截圖展示運(yùn)行的效果。如果單純的看一遍文章,不出意外,會(huì)很沒有頭緒,甚至感覺截圖中的命令、輸出亂七八糟,但是如果親自動(dòng)手跟著走一遍流程,花不了一小時(shí),但是效果絕對(duì)極佳!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45511.html

相關(guān)文章

  • 調(diào)試和分析Python腳本

    摘要:調(diào)試器可幫助程序員分析完整的代碼。我們將使用標(biāo)準(zhǔn)庫(kù)中的模塊調(diào)試我們的腳本。例外是程序執(zhí)行期間發(fā)生的錯(cuò)誤。設(shè)置斷點(diǎn)并檢查堆棧幀,并列出源代碼。輸入以繼續(xù)調(diào)試。分析和計(jì)時(shí)程序分析程序意味著測(cè)量程序的執(zhí)行時(shí)間。的模塊用于分析程序。 showImg(https://segmentfault.com/img/remote/1460000018807029?w=902&h=442); 來(lái)源 | ...

    wenzi 評(píng)論0 收藏0
  • python學(xué)習(xí)筆記-python調(diào)試

    摘要:但是在調(diào)試之后,我們還需要手動(dòng)刪除語(yǔ)句,比較麻煩。關(guān)閉后,語(yǔ)句就不再生效。的好處有很多,一個(gè)是可以制定輸出特定級(jí)別的信息。我們可以用對(duì)進(jìn)行簡(jiǎn)單的配置。小于該的都會(huì)被忽略。但是在處理很長(zhǎng)的代碼的時(shí)候,顯得效率低下。 我們?cè)趯懘a的時(shí)候,往往會(huì)有一大堆錯(cuò)誤。我們?cè)撊绾握{(diào)試呢? 用print語(yǔ)句打印 我們可以用print語(yǔ)句打印我們想要的內(nèi)容,然后在輸出中查看。 print hah 但是在調(diào)...

    hufeng 評(píng)論0 收藏0
  • Python 開發(fā)工具集:關(guān)于文檔、測(cè)試、調(diào)試、程序的優(yōu)化和分析

    摘要:通過單元測(cè)試,開發(fā)者可以為構(gòu)成程序的每一個(gè)元素例如,獨(dú)立的函數(shù),方法,類以及模塊編寫一系列獨(dú)立的測(cè)試用例。在每個(gè)測(cè)試中,斷言可以用來(lái)對(duì)不同的條件進(jìn)行檢查。當(dāng)退出調(diào)試器時(shí),調(diào)試器會(huì)自動(dòng)恢復(fù)程序的執(zhí)行。 Python已經(jīng)演化出了一個(gè)廣泛的生態(tài)系統(tǒng),該生態(tài)系統(tǒng)能夠讓Python程序員的生活變得更加簡(jiǎn)單,減少他們重復(fù)造輪的工作。同樣的理念也適用于工具開發(fā)者的工作,即便他們開發(fā)出的工具并沒有出現(xiàn)...

    shenhualong 評(píng)論0 收藏0
  • 【譯】Python的優(yōu)雅技巧

    摘要:你可以進(jìn)行如下操作需要注意的是這個(gè)竅門只適用于。在中就不需要進(jìn)行操作了,因?yàn)樗呀?jīng)默認(rèn)進(jìn)行了。這里有幾個(gè)例子可以供你參考譯文出處本文根據(jù)的所譯,整個(gè)譯文帶有我自己的理解與思想,如果譯得不好或有不對(duì)之處還請(qǐng)同行朋友指點(diǎn)。 枚舉 不要這么做: i = 0 for item in iterable: print i, item i += 1 而是這樣: for...

    legendaryedu 評(píng)論0 收藏0
  • 小李飛刀:ppppppython你好哇

    摘要:的被設(shè)定為裝飾器可以幫助我們檢查保證沒有重復(fù)值。錯(cuò)誤記錄等解釋器打印錯(cuò)誤棧的信息,程序也結(jié)束了。將通過配置記錄到日志文件中方便后續(xù)的排查。同理,指定后,和就不起作用了。啟動(dòng)的調(diào)試器,讓程序以單步方式運(yùn)行。 日常的寫在前面 難得的周末,有大段的時(shí)間可以用來(lái)學(xué)習(xí),體驗(yàn)就和工作日的晚上完全不一樣了。好好的沉下心學(xué)習(xí)下~即刻很喜歡了! 好好學(xué)習(xí)的分割線 打打打雞血!!!!!! 面向?qū)ο蟾呒?jí)編程...

    greatwhole 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

codeGoogle

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<