補充教材(Debugger) === * 這次的補充教材主要是截圖說明各功能去哪裡找、功能的內容以及如何使用。 * 如果你英文好的話,推推下面的連結: [Debugging under IDLE](https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html) ### 如何開啟idle的debugger? * 首先,一如往常地用idle開啟你的.py檔。 * 接著在Shell(不是.py檔的畫面喔)裡面,找到「Debug」,然後點選「Debugger」。  * 開起來之後大概是長這樣子↓  * Debug Control是一個新視窗,因為接下來還會用到,所以切記**不要**在開啟Debugger之後就把Shell關掉。 * Debug Control視窗最下方有一個Locals欄位,如果把上方的Globals也打勾就會多出一個Globals欄位。欄位裡面會有現在執行到一半的變數值,監控程式哪裡出錯的時候通常也就是看這裡了。(另一種是看程式碼是不是按你所想的順序執行不過~~因為這通常很明顯~~我們先不談。)  * Debug Control視窗上面那塊很大塊的白白的區域裡面的值是System stack的內容,也就是你上面打勾Stack的東西。有興趣的話可以拿關鍵字「System stack」去估狗,不過我們這裡不詳談,可以先把他理解成程式碼執行到的地方,偶爾會看到不是自己的程式碼是因為例如input()裡面的程式碼不是你寫的啊~ ### Breakpoint * 這裡的breakpoint請理解成**暫停點** * 為什麼需要breakpoint? * 因為電腦的執行速度超快,但某些地方為了確認是哪一行程式碼出錯,必須由人類手動一步一步執行。 * 如果今天你的程式碼有上千行,你不會想從第一步開始手動執行到第幾千步就為了那個存在第幾千行的bug的。 * 在猜測發生錯誤的地方前面設置breakpoint,breakpoint前面的程式就會由電腦用電腦的速度執行完成,然後在breakpoint前停下交由人類接手執行。 * 如何設置breakpoint? * 對著要設breakpoint的那行code按右鍵,選擇「set breakpoint」  * 設完breakpoint就會看到那行code的底色變黃色囉!  ### Go * 設完breakpoint之後就一如既往地按下「run module」......咦?為什麼程式卡在第一行不動了呢? * 還記得上面說在breakpoint之前,我們希望電腦用電腦的速度幫我們把程式執行完嗎?這時候按下「Go」,程式就會一直執行到下一個breakpoint之前囉~ ### Step (Into) * 那麼到了breakpoint之後,該如何手動執行程式呢? * 我們希望一步一步step by step的執行程式,所以這時候開始按下「Step」每按一次程式就會執行一步。 * 標題有個括號Into,「Step into」是踏入的意思,也就是說在遇到函式的時候按下「Step」會進入函式當中繼續一步一步慢慢執行。 ### (Step) Over * 如果我進入函式之後希望只看到函式執行完之後的結果,那麼此時我可以按下「Over」,電腦就會用電腦的速度一直執行到這個函式的最後一行,然後我就可以停在最後一行監看函式執行完之後各變數的值了~ ### (Step) Out * 如果我有十足把握我的函式寫的是對的,而且我也不想一步一步把函式裡面的code都執行過一次,我可以直接按下「Out」,這樣電腦就會用電腦的速度把整個函式執行完並且return囉~ * 實際上Out就是讓電腦幫你做完Over加一次的Step,只是這次你就看不到函式裡面的變數值了。 ### Quit * 顧名思義就是退出的意思。只是這個「Quit」結束的不是Debugger而是目前執行中的程式,還請小心使用。 ### Debug流程重點整理 1. 設breakpoints 2. 一步一步執行程式 3. 觀察變數的值是否與你想的不同 4. 找到bug之後更改程式碼 5. 再執行一次程式以確保前一次的修正是正確的 最後的最後,要是你怎麼都用不習慣debugger,其實直接把想debug的部份的變數值印出來看看也是個方法啦~
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up