<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    rosial

    lost memory
    數(shù)據(jù)加載中……

    《爪哇夜未眠》- 程序設(shè)計(jì)學(xué)習(xí)篇 - Debug

    ???? 吃燒餅不免會掉芝麻,寫程序不免會有 bug 。再怎么高明的程序員,也不敢保證寫出來的程序不會有 bug 。當(dāng)發(fā)現(xiàn)程序有誤, bug 隱身其中時,就是 debugger 出動的時候了。越是高明的程序員,越是能夠靈巧地使用 debugger ,讓 bug 無所遁形。

    ?????? Debug 的過程分成兩個步驟:

    l???????? 找到 bug 所在地

    l???????? 修正 bug

    ????? 事實(shí)上,真正困難的地方在第一點(diǎn),如果你能找到 bug 所在地,應(yīng)該就知道怎么修正 bug 了。本文章簡單地介紹 debugger 的用法,希望你再次遇到 bug 時,能夠不慌不忙地把這些技巧派上用場。

    調(diào)整步伐

    ????? 最不花腦筋的 debug 方式就是:逐行執(zhí)行,每執(zhí)行一行程序代碼就暫停,立刻觀察這一行的執(zhí)行結(jié)果是否如你所預(yù)期,沒問題的話就繼續(xù)執(zhí)行下一行。

    ????? 當(dāng)你在逐行執(zhí)行的時候,如果遇到了 method invocation (方法調(diào)用),你可以選擇要跳進(jìn)此 method 或者不跳進(jìn)此 method 。欲跳進(jìn)此 method ,就使用 step in ;欲一口氣執(zhí)行完此 method ,就使用 step over 。至于要不要跳進(jìn)去,你可以有自己的考量。一般來說,如果你認(rèn)定該 method 應(yīng)該不會有問題時,你就使用 step over ,否則使用 step in

    ????? 如果已經(jīng)在某 method 內(nèi),但是認(rèn)為此 method 后面的程序代碼不會有 bug ,你可以透過 step out 來往上跳,跳離開這個 method

    ????? 在 debug 的時候,前進(jìn)的步伐很重要, step over step in step out 三者必須好好搭配使用,才不會“自亂陣腳”。


    控制疏密

    ????? 光靠上面三種 step 方式,要找到 bug ,就如同海底撈針一樣,并不容易。你還需要 breakpoint (斷點(diǎn))的輔助。

    ????? 你應(yīng)該先透過經(jīng)驗(yàn)來判斷, bug 最有可能出現(xiàn)在哪些地方。然后在這些地方的前后分別設(shè)定 breakpoint 。為了加快 debug 的速度,我們經(jīng)常同時在程序中設(shè)定多個斷點(diǎn)。

    ????? 在 debug 模式下執(zhí)行程序時,遇到斷點(diǎn),程序就會暫停,我們可以利用這個機(jī)會檢視目前的執(zhí)行結(jié)果是否符合預(yù)期,如果有差池的話,就表示剛才執(zhí)行過的程序代碼有問題,你已經(jīng)找到了 bug 的區(qū)域,立刻停止此次的 debug 執(zhí)行模式。接著再重來一次,繼續(xù)縮小范圍。當(dāng)范圍已經(jīng)很小時,可以改用 step 的方式來找 bug

    分析觀察

    ????? 不管是肇因于 breakpoint step ,程序在 debug 模式下暫停時,我們都需要“觀察”( watch )程序目前的狀態(tài)( state ),據(jù)以判斷方才的執(zhí)行過程有無錯誤。程序狀態(tài)其實(shí)就是數(shù)據(jù)的集合,所以我們的“觀察”對象就是程序中的變量值。 debug 工具可以讓我們很方便地觀察程序中各個變量的值,有些 debug 工具還可以讓我們輸入由變量組成的計(jì)算式( expression ),輸出計(jì)算結(jié)果以方便我們觀察。

    ????? 某些 debugger 甚至具有修改變量值的功能,可以讓你在程序暫停時,修改程序狀態(tài),然后繼續(xù)執(zhí)行。

    理清頭緒

    ????? 對于多線程( multi-thread )程序, debugger 依然能進(jìn)行上述的 step breakpoint watch 。通常 debugger 會在 watch 窗口中以樹狀結(jié)構(gòu)區(qū)分出線程,然后才個別列出各個線程的區(qū)域變量,以免混淆。

    ????? 為了因應(yīng)撰寫 client/server 程序的需求,有些 debug 工具甚至可以同時幫助多個 process 進(jìn)行除錯。

    隔空抓藥

    ????? “捎來藥丸的,可是白胡子的老公公?”我們姑且相信這個妖婦 [1] 的確具備隔空抓藥的本事,但提到這樣的本事,許多 debugger 也不多讓。越來越多的 debugger 開始支持 remote debugging ,讓程序員可以在一部 PC 上, debug 另一部 PC 上的程序。

    ????? 以 Java 來說,最早支持 remote debugging 的是 VisualCafe 。現(xiàn)在, Sun JVM 都支持 JVMDI Java VM Debug Interface )以及 JDWP Java Debug Wire Protocol ),所以想設(shè)計(jì)出一個能隔空抓藥的標(biāo)準(zhǔn) remote debugger 也不難,主流的 Java 開發(fā)工具也開始支持 remote debugging

    de 程序中的 bug ,也 de 生活中的 bug

    ????? 我們除了 de 程序中的 bug ,也要 de 生活中的 bug (竊聽器也被稱做 bug )。軍政要人的座機(jī)可能被裝滿 bug ,美鳳姊姊的座車和手機(jī)內(nèi)也被裝了 bug 。越是重要的人,周遭的 bug 就會越多,越是需要常常進(jìn)行 debug

    ????? 如果無法確定生活中毫無 bug ,請各位務(wù)必要做最壞的打算,試圖干擾任何可能存在的 bug ,做法很簡單,例如:放大電視機(jī)音量、關(guān)燈,都很有效。那也就是為什么,我向親近好友坦承“關(guān)燈版”的男主角其實(shí)就是我,至今仍然沒有人相信的緣故。

    posted on 2006-07-03 14:45 rosial 閱讀(210) 評論(0)  編輯  收藏 所屬分類: 蔡學(xué)鏞

    主站蜘蛛池模板: 中文字幕亚洲专区| 在线观看国产情趣免费视频| 亚洲Av高清一区二区三区| 亚洲另类自拍丝袜第1页| 成人免费无码大片a毛片软件| 黄色三级三级免费看| 久久噜噜噜久久亚洲va久| 最近免费中文字幕视频高清在线看| 免费在线观看一区| 亚洲一线产区二线产区精华| MM131亚洲国产美女久久| 日韩精品福利片午夜免费观着 | 中文国产成人精品久久亚洲精品AⅤ无码精品| 免费看少妇高潮成人片| 亚洲色偷偷色噜噜狠狠99网| 亚洲真人无码永久在线| 在线免费观看污网站| 日本高清免费观看| 国产精品日本亚洲777| 亚洲成a人片77777群色| 亚洲免费视频一区二区三区| 18禁免费无码无遮挡不卡网站| 免费无码国产V片在线观看| 亚洲精品视频免费在线观看| 久久久无码精品亚洲日韩软件| 99精品国产免费久久久久久下载| japanese色国产在线看免费| 亚洲欧美国产欧美色欲| 久久夜色精品国产亚洲AV动态图| 九月婷婷亚洲综合在线| 国产精品免费久久| 国产成人人综合亚洲欧美丁香花 | 看免费毛片天天看| 国产精品久久亚洲不卡动漫| 亚洲va中文字幕无码久久不卡| 免费a级毛片无码av| 成年轻人网站色免费看| 国产四虎免费精品视频| 久久久久久成人毛片免费看 | 毛片基地免费观看| 18观看免费永久视频|