日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python terminal调试_python执行命令行调试工具pdb

發(fā)布時(shí)間:2025/3/15 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python terminal调试_python执行命令行调试工具pdb 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

調(diào)試

pdb

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

命令簡(jiǎn)寫(xiě)命令作用

break

b

設(shè)置斷點(diǎn)(用法,b :在第數(shù)字行設(shè)置斷點(diǎn)。.........................................................)

b 直接回車(chē),查看所有斷點(diǎn)

continue

c

直接全部執(zhí)行完畢----->直到遇到斷點(diǎn)

list

l

查看所有代碼段

step

s

進(jìn)入函數(shù)

return

r

在執(zhí)行到函數(shù)內(nèi)部時(shí);執(zhí)行代碼到return完畢

quit

q

中止并退出

next

n

執(zhí)行下一行

print

p

打印變量的值

help

h

幫助

args

a

查看當(dāng)前執(zhí)行函數(shù) 傳入的參數(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) ,num為斷點(diǎn)的編號(hào)

bt

查看函數(shù)調(diào)用棧幀

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

程序啟動(dòng),停止在第一行等待單步調(diào)試。

python -m pdb some.py

交互調(diào)試

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

import pdb

pdb.run('testfun(args)') #此時(shí)會(huì)打開(kāi)pdb調(diào)試,注意:先使用s跳轉(zhuǎn)到這個(gè)testfun函數(shù)中,然后就可以使用l看到代碼了

程序里埋點(diǎn)

當(dāng)程序執(zhí)行到pdb.set_trace() 位置時(shí)停下來(lái)調(diào)試

代碼上下文

...

import pdb

pdb.set_trace()

...

日志調(diào)試

print大法好

使用pdb調(diào)試的5個(gè)demo

demo 1

import pdb

a = "aaa"

pdb.set_trace()

b = "bbb"

c = "ccc"

final = a + b + c

print final

#調(diào)試方法

# 《1 顯示代碼》

# l---->能夠顯示當(dāng)前調(diào)試過(guò)程中的代碼,其實(shí)l表示list列出的意思

#如下,途中,-> 指向的地方表示要將要執(zhí)行的位置

# 2 a = "aaa"

# 3 pdb.set_trace()

# 4 b = "bbb"

# 5 c = "ccc"

# 6 pdb.set_trace()

# 7 -> final = a + b + c

# 8 print final

# 《2 執(zhí)行下一行代碼》

# n---->能夠向下執(zhí)行一行代碼,然后停止運(yùn)行等待繼續(xù)調(diào)試 n表示next的意思

# 《3 查看變量的值》

# p---->能夠查看變量的值,p表示prit打印輸出的意思

#例如:

# p name 表示查看變量name的值

demo 2

import pdb

a = "aaa"

pdb.set_trace()

b = "bbb"

c = "ccc"

pdb.set_trace()

final = a + b + c

print final

# 《4 將程序繼續(xù)運(yùn)行》

# c----->讓程序繼續(xù)向下執(zhí)行,與n的區(qū)別是n只會(huì)執(zhí)行下面的一行代碼,而c會(huì)像python xxxx.py一樣 繼續(xù)執(zhí)行不會(huì)停止;c表示continue的意思

# 《5 set_trace()》

# 如果程序中有多個(gè)set_trace(),那么能夠讓程序在使用c的時(shí)候停留在下一個(gè)set_trace()位置處

demo 3

#coding=utf-8

import pdb

def combine(s1,s2):

s3 = s1 + s2 + s1

s3 = '"' + s3 +'"'

return s3

a = "aaa"

pdb.set_trace()

b = "bbb"

c = "ccc"

final = combine(a,b)

print final

# 《6 設(shè)置斷點(diǎn)》

# b---->設(shè)置斷點(diǎn),即當(dāng)使用c的時(shí)候,c可以在遇到set_trace()的時(shí)候停止,也可以在遇到標(biāo)記有斷點(diǎn)的地方停止;b表示break的意思

#例如:

#b 11 在第11行設(shè)置斷點(diǎn),注意這個(gè)11可以使用l來(lái)得到

# (Pdb) l

# 4 s3 = s1 + s2 + s1

# 5 s3 = '"' + s3 +'"'

# 6 return s3

# 7 a = "aaa"

# 8 pdb.set_trace()

# 9 -> b = "bbb"

# 10 c = "ccc"

# 11 final = combine(a,b)

# 12 print final

# [EOF]

# (Pdb) b 11

# Breakpoint 1 at /Users/wangmingdong/Desktop/test3.py:11

# (Pdb) c

# > /Users/wangmingdong/Desktop/test3.py(11)()

# -> final = combine(a,b)

# (Pdb) l

# 6 return s3

# 7 a = "aaa"

# 8 pdb.set_trace()

# 9 b = "bbb"

# 10 c = "ccc"

# 11 B-> final = combine(a,b)

# 12 print final

# 《7 進(jìn)入函數(shù)繼續(xù)調(diào)試》

# s---->進(jìn)入函數(shù)里面繼續(xù)調(diào)試,如果使用n表示把一個(gè)函數(shù)的調(diào)用當(dāng)做一條語(yǔ)句執(zhí)行過(guò)去,而使用s的話,會(huì)進(jìn)入到這個(gè)函數(shù) 并且停止

#例如

# (Pdb) l

# 6 return s3

# 7 a = "aaa"

# 8 pdb.set_trace()

# 9 b = "bbb"

# 10 c = "ccc"

# 11 B-> final = combine(a,b)

# 12 print final

# [EOF]

# (Pdb) s

# --Call--

# > /Users/wangmingdong/Desktop/test3.py(3)combine()

# -> def combine(s1,s2):

# (Pdb) l

# 1 import pdb

# 2

# 3 -> def combine(s1,s2):

# 4 s3 = s1 + s2 + s1

# 5 s3 = '"' + s3 +'"'

# 6 return s3

# 7 a = "aaa"

# 8 pdb.set_trace()

# 9 b = "bbb"

# 10 c = "ccc"

# 11 B final = combine(a,b)

# (Pdb)

# 《8 查看傳遞到函數(shù)中的變量》

# a---->調(diào)用一個(gè)函數(shù)時(shí),可以查看傳遞到這個(gè)函數(shù)中的所有的參數(shù);a表示arg的意思

#例如:

# (Pdb) l

# 1 #coding=utf-8

# 2 import pdb

# 3

# 4 -> def combine(s1,s2):

# 5 s3 = s1 + s2 + s1

# 6 s3 = '"' + s3 +'"'

# 7 return s3

# 8

# 9 a = "aaa"

# 10 pdb.set_trace()

# 11 b = "bbb"

# (Pdb) a

# s1 = aaa

# s2 = bbb

# 《9 執(zhí)行到函數(shù)的最后一步》

# r----->如果在函數(shù)中不想一步步的調(diào)試了,只是想到這個(gè)函數(shù)的最后一條語(yǔ)句那個(gè)位置,比如return語(yǔ)句,那么就可以使用r;r表示return的意思

demo 4

In [1]: def pdb_test(arg):

...: for i in range(arg):

...: print(i)

...: return arg

...:

In [2]: #在python交互模式中,如果想要調(diào)試這個(gè)函數(shù),那么可以

In [3]: #采用,pdb.run的方式,如下:

In [4]: import pdb

In [5]: pdb.run("pdb_test(10)")

> (1)()

(Pdb) s

--Call--

> (1)pdb_test()

-> def pdb_test(arg):

(Pdb) l

1 -> def pdb_test(arg):

2 for i in range(arg):

3 print(i)

4 return arg

[EOF]

(Pdb) n

> (2)pdb_test()

-> for i in range(arg):

(Pdb) l

1 def pdb_test(arg):

2 -> for i in range(arg):

3 print(i)

4 return arg

[EOF]

(Pdb) n

> (3)pdb_test()

-> print(i)

(Pdb)

0

> (2)pdb_test()

-> for i in range(arg):

(Pdb)

> (3)pdb_test()

-> print(i)

(Pdb)

1

> (2)pdb_test()

-> for i in range(arg):

(Pdb)

demo 5 運(yùn)行過(guò)程中使用pdb修改變量的值

In [7]: pdb.run("pdb_test(1)")

> (1)()

(Pdb) s

--Call--

> (1)pdb_test()

-> def pdb_test(arg):

(Pdb) a

arg = 1

(Pdb) l

1 -> def pdb_test(arg):

2 for i in range(arg):

3 print(i)

4 return arg

[EOF]

(Pdb) !arg = 100 #!!!這里是修改變量的方法

(Pdb) n

> (2)pdb_test()

-> for i in range(arg):

(Pdb) l

1 def pdb_test(arg):

2 -> for i in range(arg):

3 print(i)

4 return arg

[EOF]

(Pdb) p arg

100

(Pdb)

練一練:請(qǐng)使用所學(xué)的pdb調(diào)試技巧對(duì)其進(jìn)行調(diào)試出bug

#coding=utf-8

import pdb

def add3Nums(a1,a2,a3):

result = a1+a2+a3

return result

def get3NumsAvarage(s1,s2):

s3 = s1 + s2 + s1

result = 0

result = add3Nums(s1,s2,s3)/3

if __name__ == '__main__':

a = 11

# pdb.set_trace()

b = 12

final = get3NumsAvarage(a,b)

print final

pdb 調(diào)試有個(gè)明顯的缺陷就是對(duì)于多線程,遠(yuǎn)程調(diào)試等支持得不夠好,同時(shí)沒(méi)有較為直觀的界面顯示,不太適合大型的 python 項(xiàng)目。而在較大的 python 項(xiàng)目中,這些調(diào)試需求比較常見(jiàn),因此需要使用更為高級(jí)的調(diào)試工具。

總結(jié)

以上是生活随笔為你收集整理的python terminal调试_python执行命令行调试工具pdb的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。