新手必會,pycharm的調試功能(史上最詳篇)


前言

Debug調試,是一項學習編程人員的重要技能。只有當你學會 debug 了以後,才可以正確的知道程序的走向流程是如何的,今天就來給大家介紹一下 pycharm 中的 debug 功能!

debug的前世

在正式講解之前,先來了解下 debug 這個詞的由來,就像我們初學Python 時,先要了解下它歷史的由來。

1937年,美國青年霍華德·艾肯找到IBM公司為其投資200萬美元研製計算機,第一臺成品艾肯把它取名為:馬克1號(mark1),又叫“自動序列受控計算機”,從這時起IBM公司由生產製表機,肉鋪磅秤,咖啡研磨機等亂七八糟玩意兒行業,正式跨進“計算機”領地。

為馬克1號編制程序的是哈佛的一位女數學家葛麗斯·莫雷·霍波,有一天,她在調試程序時出現故障,拆開繼電器後,發現有隻飛蛾被夾扁在觸點中間,從而“卡”住了機器的運行。於是,霍波詼諧的把程序故障統稱為“臭蟲(BUG)”,把排除程序故障叫DEBUG,而這奇怪的“稱呼”,後來成為計算機領域的專業行話。從而debug意為排除程序故障的意思。

看了上面的小故事,debug 一詞的由來,是由 bug 詞得來的,bug 是臭蟲的意思,debug 就是解決臭蟲。

在如今的互聯網時代,多少你肯定聽說過 bug 這個詞,比如什麼什麼軟件又出 bug 了!說的就是軟件在使用的過程中,程序出現了一些錯誤。故稱之為 bug。

**而 debug 則是通過工具來對代碼進行調試,一步步找出程序中出現 bug 的位置,也就是程序中具體錯誤代碼的位置。**就像故事中所說,debug過程就是在解決蟲子一樣。。

pycharm 中的 debug 模式

來步入今天的正題。

首先,還是用示例說話,我們書寫一段簡短的代碼,來幫我們完成今天要講的內容。

def sum_demo(x, y):
for _ in range(2):
x += 1
y += 1
result = x + y
return result

if __name__ == '__main__':
result = sum_demo(1, 1)
print(result)

肉眼識別下,猜猜結果是多少呢?初學者可能沒見過 for 循環中的下劃線,在 Python 中是佔位符的意思,因為單純的循環兩次而已,並不用到它的循環結果。最終 result 會輸出 6 。

在 pycharm 中,如何開啟 debug 調試,一共有三種進入的方法,如下(下圖均可點開放大觀看):

方法一:

新手必會,pycharm的調試功能(史上最詳篇)

方法二:

新手必會,pycharm的調試功能(史上最詳篇)

方法三:

新手必會,pycharm的調試功能(史上最詳篇)

還有一種方法,就是 pycharm 導航欄處,有個run,點開以後即可看到 debug ,這裡就不截圖演示了。

單純的進入 debug 模式,你會發現,與正常的 run 去運行程序沒有差異。差異就是 pycharm 的控制檯部分,從 run 跑到了 debug 顯示。

新手必會,pycharm的調試功能(史上最詳篇)

接下來要講的,才是 debug 中的重中之重,即斷點調試!

debug 的斷點調試

斷點調試,英文 breakpoint。用大白話來解釋下,斷點調試其實就是在程序自動運行的過程中,你在代碼某一處打上了斷點,當程序跑到你設置的斷點位置處,則會中斷下來,此時你可以看到之前運行過的所有程序變量。

來繼續剛才的演示,pycharm 中如何設置斷點。

點擊前:

新手必會,pycharm的調試功能(史上最詳篇)

點擊後,皮一下,每行代碼都設置上斷點:

新手必會,pycharm的調試功能(史上最詳篇)

設置完斷點後,開啟 debug 調試模式運行下,看到結果:

新手必會,pycharm的調試功能(史上最詳篇)

看到了這麼多新擺設,是不是有點怕了!不怕,咱們先來從控制檯每個按鈕講起:

新手必會,pycharm的調試功能(史上最詳篇)

如果要是忘記中文意思的話,沒有關係,鼠標指到按鈕處,懸浮一會兒,會有英文提示的。繼續再來說橫排按鈕:

新手必會,pycharm的調試功能(史上最詳篇)

其中,橫排最重要,經常用到的按鈕,來解釋一下,自己鼠標懸浮去看英文即可:

step over(F8快捷鍵):在單步執行時,在函數內遇到子函數時不會進入子函數內單步執行,而是將子函數整個執行完再停止,也就是把子函數整個作為一步。在不存在子函數的情況下是和step into效果一樣的。簡單的說就是,程序代碼越過子函數,但子函數會執行,且不進入。

step into(F7快捷鍵):在單步執行時,遇到子函數就進入並且繼續單步執行,有的會跳到源代碼裡面去執行。

step into my code(Alt+Shift+F7快捷鍵):在單步執行時,遇到子函數就進入並且繼續單步執行,不會進入到源碼中。

step out(Shift+F8快捷鍵):假如進入了一個函數體中,你看了兩行代碼,不想看了,跳出當前函數體內,返回到調用此函數的地方,即使用此功能即可。

Resume program(F9快捷鍵):繼續恢復程序,直接運行到下一斷點處。

以上四個功能,就是最常用的功能,一般操作步驟就是,

設置好斷點,debug運行,然後 F8 單步調試,遇到想進入的函數 F7 進去,想出來在 shift + F8,跳過不想看的地方,直接設置下一個斷點,然後 F9 過去。

示例演示

上面的基礎概念明白了以後,直接用圖片示例演示下:

1.設置初步斷點

新手必會,pycharm的調試功能(史上最詳篇)

2.F7 進入函數

新手必會,pycharm的調試功能(史上最詳篇)

3.F8 單步調試,往下執行代碼

新手必會,pycharm的調試功能(史上最詳篇)

繼續 F8 單步調試,往下執行代碼:

新手必會,pycharm的調試功能(史上最詳篇)

繼續 F8 單步調試:

新手必會,pycharm的調試功能(史上最詳篇)

繼續 F8 單步調試:

新手必會,pycharm的調試功能(史上最詳篇)

新手必會,pycharm的調試功能(史上最詳篇)

4.看夠了循環,想直接看最終 result 加完的結果,結果處打斷點,直接 F9

新手必會,pycharm的調試功能(史上最詳篇)

以上就是斷點調試的全過程。看完之後,理解了嗎~是不是頓時明白了斷點調試的重要性,使用斷點可以快速幫助我們理解程序中的各處邏輯!

結語

看到這裡,基本的調試,相信你認真看完的話,已經可以上手使用了!但是要拓展的點還有很多,比如 pycharm 為什麼在工程性的程序中頗受歡迎,因為它實在是太強大了。。。還有一些拓展功能,大家可以去慕課網上搜下

IntelliJ IDEA神器使用技巧 ,老師講的非常詳細,涉及到許多技巧,idea和pycharm是一家公司出的,所以使用上的技巧也是一樣的,可以融會貫通。

慕課網課程具體地址(免費課程):

https://www.imooc.com/learn/924

為什麼在 Python 小課堂中,沒有提前介紹這麼重要的技巧,其實是有所顧慮的,前期學習中,筆者認為更多地精力應該放在學習本身上,而非工具上,就算沒有debug,如果藉助 Python 中的 print() 函數依然可以達到想要的結果,最笨的方法不就是一步步的 print 打印出你想要的結果嗎!然而笨方法往往使人印象深刻呢!

希望本篇文章可以幫到正在初學的你,寫程序的過程中,斷點調試真的很重要!!歡迎點贊,評論,留言,收藏,轉發哦!工具類教學最適合分享了!~


分享到:


相關文章: