成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python進(jìn)入函數(shù)調(diào)試的簡(jiǎn)單介紹

python如何一步步調(diào)試

裝個(gè)Pycharm

武山網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)2013年開(kāi)創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)

1 添加斷點(diǎn)

2 Debug下運(yùn)行代碼:

3 F8:進(jìn)行下一步操作

F7 :跳入下一個(gè)方法中

怎么調(diào)試python腳本

打開(kāi)pycharm community 2019.1軟件,創(chuàng)建一個(gè)項(xiàng)目。

創(chuàng)建一個(gè)py后綴的文件作為示范,文件名自己定義。

相關(guān)推薦:《Python基礎(chǔ)教程》

編寫代碼,然后右鍵點(diǎn)擊進(jìn)行運(yùn)行,查看一下是否有問(wèn)題。

點(diǎn)擊右上角的蟲(chóng)子圖標(biāo),然后下面會(huì)有控制面板出來(lái),點(diǎn)擊Debugger,然后我們?cè)谛刑?hào)那里選擇要調(diào)試哪一行,點(diǎn)擊就會(huì)有紅點(diǎn)。

再點(diǎn)擊蟲(chóng)子圖標(biāo),這個(gè)時(shí)候就可以開(kāi)始調(diào)試了,點(diǎn)擊step over或者快捷鍵f8就可以調(diào)試了。

但是我們可以看出就直接跳過(guò)函數(shù)內(nèi)部,對(duì)于函數(shù)內(nèi)部的調(diào)試,我們則需要點(diǎn)擊step into,或者快捷鍵f7,這樣才可以調(diào)試內(nèi)部。

怎么用python的pdb模塊進(jìn)行調(diào)試?

工具/材料

電腦,python環(huán)境

01

首先打開(kāi)電腦后,打開(kāi)終端,我這里以調(diào)試debug.py文件做說(shuō)明,簡(jiǎn)單介紹python的pdb調(diào)試。為了演示,先用cat命令查看一下debug.py的內(nèi)容。

02

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

03

進(jìn)入調(diào)試后,在終端里輸入小寫字母l,就是英文單詞list的縮寫,意思就是列出代碼內(nèi)容。如果顯示。

04

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

05

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

06

在終端里輸入小寫字母s,s就是英文單詞s的縮寫,進(jìn)入函數(shù)內(nèi)部調(diào)試。

07

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

08

在終端里輸入小寫字母c,就是英文單詞continue的縮寫,意思就是繼續(xù)執(zhí)行代碼一直結(jié)束,然后重新進(jìn)入調(diào)試。

09

在終端里輸入小寫字母b和阿拉伯?dāng)?shù)字6,b就是英文單詞break的縮寫,意思就是在第6行代碼打個(gè)斷點(diǎn)。

10

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

如何用pdb進(jìn)行python調(diào)試

本文章講述了如何用pdb進(jìn)行python調(diào)試講解.

當(dāng)手邊

沒(méi)有IDE,面對(duì)著python調(diào)試犯愁時(shí),你就可以參考下本文;(pdb 命令調(diào)試)

和 (pdb)help

用pdb進(jìn)行python調(diào)試,用法基本和gdb差不多,

先看一個(gè)簡(jiǎn)單的例子:

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

a = "aaa"

b = "bbb"

c = "ccc"

final = a + b + c

print final

比如要對(duì)這個(gè)程序進(jìn)行調(diào)試:

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

import pdb

2:在要開(kāi)始調(diào)試的一行加上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 可以運(yùn)行這個(gè)程序,到斷點(diǎn)出會(huì)停下來(lái),和gdb類似,

可以執(zhí)行命令:

直接回車是重復(fù)前一條命令!

p(print) 查看一個(gè)變量值

n(next) 下一步

s(step) 單步,可進(jìn)入函數(shù)

c(continue)繼續(xù)前進(jìn)

l(list)看源代碼

用pdb調(diào)試有多種方式可選:

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

python -m pdb myscript.py

2. 在Python交互環(huán)境中啟用調(diào)試

import pdb

import mymodule

pdb.run('mymodule.test()')

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

a = 1

importpdb

pdb .set_trace()

b = 2

c = a + b

print( c)

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

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

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

(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斷點(diǎn)設(shè)置

(Pdb)b10 #斷點(diǎn)設(shè)置在本py的第10行

或(Pdb)bots.py:20 #斷點(diǎn)設(shè)置到 ots.py第20行

刪除斷點(diǎn)(Pdb)b #查看斷點(diǎn)編號(hào)

(Pdb)cl 2 #刪除第2個(gè)斷點(diǎn)

運(yùn)行

(Pdb)n #單步運(yùn)行

(Pdb)s #細(xì)點(diǎn)運(yùn)行 也就是會(huì)下到,方法

(Pdb)c #跳到下個(gè)斷點(diǎn)

查看

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

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

(Pdb)a #查看全部棧內(nèi)變量 b(reak), 設(shè)置斷點(diǎn),例如 "b 77″,就是在當(dāng)前腳本的77行打上斷點(diǎn),還能輸入函數(shù)名作為參數(shù),斷點(diǎn)就打到具體的函數(shù)入口,如果只敲b,會(huì)顯示現(xiàn)有的全部斷點(diǎn)

(Pdb) b 504

Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504 condition bpnumber [condition],設(shè)置條件斷點(diǎn),下面語(yǔ)句就是對(duì)第4個(gè)斷點(diǎn)加上條件"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),如果后面帶有參數(shù),就是清除指定的斷點(diǎn)(我在Python2.4上從來(lái)沒(méi)成功過(guò)!!!);如果不帶參數(shù)就是清除所有的斷點(diǎn)

(Pdb) cl

Clear all breaks? y disable/enable,禁用/激活斷點(diǎn)

(Pdb) disable 3

(Pdb) b

Num Type Disp Enb Where

3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505 n(ext),讓程序運(yùn)行下一行,如果當(dāng)前語(yǔ)句有一個(gè)函數(shù)調(diào)用,用n是不會(huì)進(jìn)入被調(diào)用的函數(shù)體中的

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

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

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

(Pdb) j 497

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

- pdb.set_trace() a(rgs),打印當(dāng)前函數(shù)的參數(shù)

(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,最有用的命令之一,打印某個(gè)變量

(Pdb) p _new

u'./new/MRM-8137.log' !,感嘆號(hào)后面跟著語(yǔ)句,可以直接改變某個(gè)變量

q(uit),退出調(diào)試

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

在python中使用pdb模塊可以進(jìn)行調(diào)試

import pdb

pdb.set_trace()

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

(Pdb) 會(huì)自動(dòng)停在第一行,等待調(diào)試,這時(shí)你可以看看 幫助

(Pdb) h

說(shuō)明下這幾個(gè)關(guān)鍵 命令

斷點(diǎn)設(shè)置

(Pdb)b 10 #斷點(diǎn)設(shè)置在本py的第10行

或(Pdb)b ots.py:20 #斷點(diǎn)設(shè)置到 ots.py第20行

刪除斷點(diǎn)(Pdb)b #查看斷點(diǎn)編號(hào)

(Pdb)cl 2 #刪除第2個(gè)斷點(diǎn)

運(yùn)行

(Pdb)n #單步運(yùn)行

(Pdb)s #細(xì)點(diǎn)運(yùn)行 也就是會(huì)下到,方法

(Pdb)c #跳到下個(gè)斷點(diǎn)

查看

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

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

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

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

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

(Pdb)u 在call stack中往上移一層。如果在上移一層之后按下 n ,則會(huì)在上移之后的一層執(zhí)行下一個(gè)敘述,之前的 function call 就自動(dòng)返回。

(Pdb)cl 清除指定的斷點(diǎn)。如果沒(méi)有帶參數(shù),則清除所有斷點(diǎn)。

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

(Pdb)enable 恢復(fù)斷點(diǎn)的功能。

(Pdb)ignore 設(shè)定斷點(diǎn)的忽略次數(shù)。如果沒(méi)指定 count,其初始 為 0。當(dāng) count 為 0 時(shí),斷點(diǎn)會(huì)正常動(dòng)作。若有指定 count,則每次執(zhí)行到該中斷, count 就少 1,直到 count 數(shù)為 0。

(Pdb)condition bpnumber [condition]

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

(Pdb)l 列出目前所在檔案中的位置。連續(xù)地 l 命令會(huì)一直列到檔案結(jié)尾,可以使用指定行數(shù)或范圍來(lái)打印。

(Pdb)pp 和 p 命令類似,但是使用 pprint module(沒(méi)用過(guò) pprint,詳情請(qǐng)參考 Python Library Reference)。

(Pdb)alias 以一個(gè)"別名"代替"一群除錯(cuò)命令",有點(diǎn)類似 c/c 的 macro(詳情請(qǐng)參考 Python Library Reference)。

(Pdb)unalias 取消某個(gè) alias。

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

轉(zhuǎn)載

分享題目:python進(jìn)入函數(shù)調(diào)試的簡(jiǎn)單介紹
瀏覽路徑:http://jinyejixie.com/article6/hejjig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、用戶體驗(yàn)自適應(yīng)網(wǎng)站、域名注冊(cè)、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
红原县| 黑水县| 双城市| 阿拉善左旗| 莱州市| 南和县| 靖江市| 黄骅市| 综艺| 黄骅市| 柳林县| 张家川| 六枝特区| 天峨县| 高淳县| 满城县| 江西省| 体育| 镇坪县| 潜山县| 蒙山县| 大安市| 和平县| 辉南县| 礼泉县| 盐津县| 昆明市| 武定县| 富顺县| 西昌市| 罗城| 巴青县| 宁远县| 遂宁市| 永州市| 文昌市| 特克斯县| 台中县| 都匀市| 宁津县| 北宁市|