《爪哇夜未眠》- 程序設計學習篇 - Debug
?????? Debug 的過程分成兩個步驟:
l???????? 找到 bug 所在地
l???????? 修正 bug
????? 事實上,真正困難的地方在第一點,如果你能找到 bug 所在地,應該就知道怎么修正 bug 了。本文章簡單地介紹 debugger 的用法,希望你再次遇到 bug 時,能夠不慌不忙地把這些技巧派上用場。
調整步伐
????? 最不花腦筋的 debug 方式就是:逐行執行,每執行一行程序代碼就暫停,立刻觀察這一行的執行結果是否如你所預期,沒問題的話就繼續執行下一行。
????? 當你在逐行執行的時候,如果遇到了 method invocation (方法調用),你可以選擇要跳進此 method 或者不跳進此 method 。欲跳進此 method ,就使用 step in ;欲一口氣執行完此 method ,就使用 step over 。至于要不要跳進去,你可以有自己的考量。一般來說,如果你認定該 method 應該不會有問題時,你就使用 step over ,否則使用 step in 。
????? 如果已經在某 method 內,但是認為此 method 后面的程序代碼不會有 bug ,你可以透過 step out 來往上跳,跳離開這個 method 。
????? 在 debug 的時候,前進的步伐很重要, step over 、 step in 、 step out 三者必須好好搭配使用,才不會“自亂陣腳”。
控制疏密
????? 光靠上面三種 step 方式,要找到 bug ,就如同海底撈針一樣,并不容易。你還需要 breakpoint (斷點)的輔助。
????? 你應該先透過經驗來判斷, bug 最有可能出現在哪些地方。然后在這些地方的前后分別設定 breakpoint 。為了加快 debug 的速度,我們經常同時在程序中設定多個斷點。
????? 在 debug 模式下執行程序時,遇到斷點,程序就會暫停,我們可以利用這個機會檢視目前的執行結果是否符合預期,如果有差池的話,就表示剛才執行過的程序代碼有問題,你已經找到了 bug 的區域,立刻停止此次的 debug 執行模式。接著再重來一次,繼續縮小范圍。當范圍已經很小時,可以改用 step 的方式來找 bug 。
分析觀察
????? 不管是肇因于 breakpoint 或 step ,程序在 debug 模式下暫停時,我們都需要“觀察”( watch )程序目前的狀態( state ),據以判斷方才的執行過程有無錯誤。程序狀態其實就是數據的集合,所以我們的“觀察”對象就是程序中的變量值。 debug 工具可以讓我們很方便地觀察程序中各個變量的值,有些 debug 工具還可以讓我們輸入由變量組成的計算式( expression ),輸出計算結果以方便我們觀察。
????? 某些 debugger 甚至具有修改變量值的功能,可以讓你在程序暫停時,修改程序狀態,然后繼續執行。
理清頭緒
????? 對于多線程( multi-thread )程序, debugger 依然能進行上述的 step 、 breakpoint 、 watch 。通常 debugger 會在 watch 窗口中以樹狀結構區分出線程,然后才個別列出各個線程的區域變量,以免混淆。
????? 為了因應撰寫 client/server 程序的需求,有些 debug 工具甚至可以同時幫助多個 process 進行除錯。
隔空抓藥
????? “捎來藥丸的,可是白胡子的老公公?”我們姑且相信這個妖婦 [1] 的確具備隔空抓藥的本事,但提到這樣的本事,許多 debugger 也不多讓。越來越多的 debugger 開始支持 remote debugging ,讓程序員可以在一部 PC 上, debug 另一部 PC 上的程序。
????? 以 Java 來說,最早支持 remote debugging 的是 VisualCafe ?,F在, Sun 的 JVM 都支持 JVMDI ( Java VM Debug Interface )以及 JDWP ( Java Debug Wire Protocol ),所以想設計出一個能隔空抓藥的標準 remote debugger 也不難,主流的 Java 開發工具也開始支持 remote debugging 。
de 程序中的 bug ,也 de 生活中的 bug
????? 我們除了 de 程序中的 bug ,也要 de 生活中的 bug (竊聽器也被稱做 bug )。軍政要人的座機可能被裝滿 bug ,美鳳姊姊的座車和手機內也被裝了 bug 。越是重要的人,周遭的 bug 就會越多,越是需要常常進行 debug 。
????? 如果無法確定生活中毫無 bug ,請各位務必要做最壞的打算,試圖干擾任何可能存在的 bug ,做法很簡單,例如:放大電視機音量、關燈,都很有效。那也就是為什么,我向親近好友坦承“關燈版”的男主角其實就是我,至今仍然沒有人相信的緣故。
posted on 2006-07-03 14:45 rosial 閱讀(213) 評論(0) 編輯 收藏 所屬分類: 蔡學鏞