国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用Pdb調(diào)試Python

codeGoogle / 795人閱讀

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

簡單介紹

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

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

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

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

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

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

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

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

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

本文接下來重點講到的實例展示就是使用這種方式進行調(diào)試的!

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

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

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

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

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

準(zhǔn)備測試程序

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

testFun.py

這是一個會被主模塊調(diào)用的子模塊,用于測試使用 Pdb調(diào)試的時候,是不是可以斷點從主模塊跟蹤進入子模塊(后續(xù)有說明)

#!/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)前鍵值對:", k, "-", v
    print ""
總結(jié)常用的命令 基礎(chǔ)命令

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

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

斷點管理

b(reak):設(shè)置斷點

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

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

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

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

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

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

disable/enable:禁用/激活斷點

程序邏輯控制

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

c(ont(inue)),讓程序正常運行,直到遇到下一個斷點

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

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

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

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

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

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

打印重要信息

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

p,打印某個變量

退出調(diào)試

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

最后說一句

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/45511.html

相關(guān)文章

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

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

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

    摘要:但是在調(diào)試之后,我們還需要手動刪除語句,比較麻煩。關(guān)閉后,語句就不再生效。的好處有很多,一個是可以制定輸出特定級別的信息。我們可以用對進行簡單的配置。小于該的都會被忽略。但是在處理很長的代碼的時候,顯得效率低下。 我們在寫代碼的時候,往往會有一大堆錯誤。我們該如何調(diào)試呢? 用print語句打印 我們可以用print語句打印我們想要的內(nèi)容,然后在輸出中查看。 print hah 但是在調(diào)...

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

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

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

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

    legendaryedu 評論0 收藏0
  • 小李飛刀:ppppppython你好哇

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

    greatwhole 評論0 收藏0

發(fā)表評論

0條評論

codeGoogle

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<