關於使用pdb調試python程序的信息

本文目錄一覽:

如何用pdb進行python調試

 本文章講述了如何用pdb進行python調試講解.

當手邊

沒有IDE,面對着python調試犯愁時,你就可以參考下本文;(pdb 命令調試)

和 (pdb)help

用pdb進行python調試,用法基本和gdb差不多,

先看一個簡單的例子:

epdb1.py .# epdb1.py — experiment with the Python debugger, pdb

a = “aaa”

b = “bbb”

c = “ccc”

final = a + b + c

print final

比如要對這個程序進行調試:

1:在文件前面加上這一句,引入調試的模塊。

import pdb

2:在要開始調試的一行加上pdb.set_trace()文件變成:

# epdb1.py — experiment with the Python debugger, pdb

import pdb

a = “aaa”

pdb.set_trace()

b = “bbb”

c = “ccc”

final = a + b + c

print final 可以運行這個程序,到斷點出會停下來,和gdb類似,

可以執行命令:

直接回車是重複前一條命令!

p(print) 查看一個變量值

n(next) 下一步

s(step) 單步,可進入函數

c(continue)繼續前進

l(list)看源代碼

用pdb調試有多種方式可選:

1.命令行啟動目標程序,加上-m參數,這樣調用myscript.py的話斷點就是程序的執行第一行之前

python -m pdb myscript.py

2. 在Python交互環境中啟用調試

import pdb

import mymodule

pdb.run(‘mymodule.test()’)

3.比較常用的,就是在程序中間插入一段程序,相對於在一般IDE裡面打上斷點然後啟動debug,不過這種方式是hardcode的 if __name__ == “__main__” :

a = 1

importpdb

pdb .set_trace()

b = 2

c = a + b

print( c)

然後正常運行腳本,到了pdb.set_trace()那就會定下來,就可以看到調試的提示符(Pdb)了

常用的調試命令 h(elp),會打印當前版本Pdb可用的命令,如果要查詢某個命令,可以輸入 h [command],例如:”h l” – 查看list命令

l(ist),可以列出當前將要運行的代碼塊

(Pdb) l

497 pdb.set_trace()

498 base_data = {}

499 new_data = {}

500 try:

501 execfile(base_file_name,{},base_data)

502 – execfile(new_file_name,{},new_data)

503 except:

504 logger.writeLog(“error! load result log error!”)

505 print “load cmp logs error!”

506 raise Exception, “load cmp logs error!”

507斷點設置

(Pdb)b10 #斷點設置在本py的第10行

或(Pdb)bots.py:20 #斷點設置到 ots.py第20行

刪除斷點(Pdb)b #查看斷點編號

(Pdb)cl 2 #刪除第2個斷點

運行

(Pdb)n #單步運行

(Pdb)s #細點運行 也就是會下到,方法

(Pdb)c #跳到下個斷點

查看

(Pdb)p param #查看當前 變量值

(Pdb)l #查看運行到某處代碼

(Pdb)a #查看全部棧內變量 b(reak), 設置斷點,例如 “b 77″,就是在當前腳本的77行打上斷點,還能輸入函數名作為參數,斷點就打到具體的函數入口,如果只敲b,會顯示現有的全部斷點

(Pdb) b 504

Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504 condition bpnumber [condition],設置條件斷點,下面語句就是對第4個斷點加上條件”a==3″

(Pdb) condition 4 a==3

(Pdb) b

Num Type Disp Enb Where

4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504

stop only if a==3 cl(ear),如果後面帶有參數,就是清除指定的斷點(我在Python2.4上從來沒成功過!!!);如果不帶參數就是清除所有的斷點

(Pdb) cl

Clear all breaks? y disable/enable,禁用/激活斷點

(Pdb) disable 3

(Pdb) b

Num Type Disp Enb Where

3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505 n(ext),讓程序運行下一行,如果當前語句有一個函數調用,用n是不會進入被調用的函數體中的

s(tep),跟n相似,但是如果當前有一個函數調用,那麼s會進入被調用的函數體中

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

j(ump),讓程序跳轉到指定的行數

(Pdb) j 497

/home/jchen/regression/regressionLogCMP.py(497)com pareLog()

– pdb.set_trace() a(rgs),打印當前函數的參數

(Pdb) a

_logger =

_base = ./base/MRM-8137.log

_new = ./new/MRM-8137.log

_caseid = 5550001

_toStepNum = 10

_cmpMap = {‘_bcmpbinarylog’: ‘True’, ‘_bcmpLog’: ‘True’, ‘_bcmpresp’: ‘True’} p,最有用的命令之一,打印某個變量

(Pdb) p _new

u’./new/MRM-8137.log’ !,感嘆號後面跟着語句,可以直接改變某個變量

q(uit),退出調試

==============================================================================================

在python中使用pdb模塊可以進行調試

import pdb

pdb.set_trace()

也可以使用python -m pdb mysqcript.py這樣的方式

(Pdb) 會自動停在第一行,等待調試,這時你可以看看 幫助

(Pdb) h

說明下這幾個關鍵 命令

斷點設置

(Pdb)b 10 #斷點設置在本py的第10行

或(Pdb)b ots.py:20 #斷點設置到 ots.py第20行

刪除斷點(Pdb)b #查看斷點編號

(Pdb)cl 2 #刪除第2個斷點

運行

(Pdb)n #單步運行

(Pdb)s #細點運行 也就是會下到,方法

(Pdb)c #跳到下個斷點

查看

(Pdb)p param #查看當前 變量值

(Pdb)l #查看運行到某處代碼

(Pdb)a #查看全部棧內變量

(Pdb)w 列出目前call stack 中的所在層。

(Pdb)d 在call stack中往下移一層

(Pdb)u 在call stack中往上移一層。如果在上移一層之後按下 n ,則會在上移之後的一層執行下一個敘述,之前的 function call 就自動返回。

(Pdb)cl 清除指定的斷點。如果沒有帶參數,則清除所有斷點。

(Pdb)disable 取消所有斷點的功能,但仍然保留這些斷點。

(Pdb)enable 恢復斷點的功能。

(Pdb)ignore 設定斷點的忽略次數。如果沒指定 count,其初始 為 0。當 count 為 0 時,斷點會正常動作。若有指定 count,則每次執行到該中斷, count 就少 1,直到 count 數為 0。

(Pdb)condition bpnumber [condition]

(Pdb)j(ump) lineNo. 跳到某行執行。只有在 call stack 的最底部才能作用。

(Pdb)l 列出目前所在檔案中的位置。連續地 l 命令會一直列到檔案結尾,可以使用指定行數或範圍來打印。

(Pdb)pp 和 p 命令類似,但是使用 pprint module(沒用過 pprint,詳情請參考 Python Library Reference)。

(Pdb)alias 以一個”別名”代替”一群除錯命令”,有點類似 c/c 的 macro(詳情請參考 Python Library Reference)。

(Pdb)unalias 取消某個 alias。

(Pdb)[!]statement 在目前的環境(context)中執行敘述。

如何用pdb進行python調試?

Debug 對於是一項非常重要的功能,它能夠幫助我們準確的定位錯誤,發現程序中的 bug。

python 提供了一系列 debug 的工具和包,可供我們選擇。

pdb 是 python 自帶的一個包,為 python 程序提供了一種交互的源代碼調試功能,主要特性包括

設置斷點

單步調試

進入函數調試

查看當前代碼

查看棧片段

動態改變變量的值

啟動方式:python -m pdb xxx.py

怎麼用python的pdb模塊進行調試?

工具/材料

電腦,python環境

01

首先打開電腦後,打開終端,我這裡以調試debug.py文件做說明,簡單介紹python的pdb調試。為了演示,先用cat命令查看一下debug.py的內容。

02

我這裡用的python3的環境,在終端里輸入如圖顯示python3 -m pdb debug.py命令。就是就是用python的pdb模塊調試debug.py文件代碼。

03

進入調試後,在終端里輸入小寫字母l,就是英文單詞list的縮寫,意思就是列出代碼內容。如果顯示。

04

在終端里輸入小寫字母n,就是英文單詞next的縮寫,意思就是執行下一行代碼。

05

在終端里輸入小寫字母p x,p就是英文單詞print的縮寫,意思就是打印變量x的值。

06

在終端里輸入小寫字母s,s就是英文單詞s的縮寫,進入函數內部調試。

07

在終端里輸入小寫字母a,a就是英文單詞arguments(參數)的縮寫,會打印顯示函數所有變量的值。

08

在終端里輸入小寫字母c,就是英文單詞continue的縮寫,意思就是繼續執行代碼一直結束,然後重新進入調試。

09

在終端里輸入小寫字母b和阿拉伯數字6,b就是英文單詞break的縮寫,意思就是在第6行代碼打個斷點。

10

在終端里輸入小寫字母q,q就是英文單詞quit的縮寫,意思就是退出調試。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/301262.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:08
下一篇 2024-12-30 16:08

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29

發表回復

登錄後才能評論