有很多因素決定了調試在編程乃至整個計算機世界中的無比重要性。從根本上來說,是計算機系統的設計理念決定了調試的重要地位。現代計算機系統的一個重要設計原則是讓硬件在軟件的指揮下工作,把靈活和智能留在軟件中實現,這同時也把計算機系統的控制權交給了軟件。讓軟件控制強大的計算機硬件是聰明的,運行不同的軟件就可以讓同一台機器做完全不同的事情也是冒險的,一條錯誤的指令就可能讓系統崩潰甚至導致災難。 降低風 險的方法是提高軟件的質量和我們對軟件的控 制力。 但對人 類而言 , 無形 的軟件比有形 的硬件更加難以駕馭 ! 軟件瑕疵 總是存在但卻難以尋找 ; 病毒和惡意軟件不請 自來 , 而且揮之不去 ; C P U 不堪重負 , 用 戶下達的命令卻還得不 到執行。 相對於淳朴的硬件 , 軟件更 加復雜 、 多變、 柒鶩、 事故和狡黯 ! 何以應對? 為了控制軟件 , 計算機先 驅在一開始設計計算機系統時就設計了各種調試設施 , 包括單步執行和 中 斷執行等。 今天我們將這些 功能納入 到調試器工具中。 一旦進 了調 試器 , 再狂野的軟件都會變得服服帖帖 , 所有的宏觀結構和微觀 細節任由我們審 閱 , 大到整個地址空 間和每個文件 , 小到每一個內存單元和每一條指令 。 如果靜態的分析還不夠 , 那么我們可 以讓 它根據我們的要求來執行 , 執行 一 條指令 , 執行到下一個分支 , 執行到上一級 函數 , 等等。 總之 , 以調試 器 為核心的調 試技術是征服軟件和計算機世界的最強大工具 , 其用途很廣。
具 體地講 , 首先 , 調試是 定位軟件瑕疵的最直接和最 有效的方法 。 沒 有哪個程序員能一下子 寫出沒有錯誤 的代碼。 而使用 以調試器 為主的調試 工具進行調試是定位瑕疵的最直接方法 , 可以從 問題 的症狀入手 , 正 向跟 蹤或者反 向追 溯。 對於大多數瑕疵 , 使用合適的調試方法可 以大大提高定 位到問題根源 的效率 。 今天的軟件環境在不斷向着大型化 、 並行化、 復雜 化 方向發展 , 定位瑕疵的難度也在隨之不 斷提高。 完全靠讀源代碼來尋找 b u g 的方法已經很難適應今天的軟件發展形勢 。 另外 , 枚舉和排除法通常 也會因系統中的軟硬件模塊數量太 多而難 以實施 , 有時候 , 花了幾天時間 來做替換仍然找不 到懷疑對 象。
第二 , 調 試可 以幫助程序員提高編寫代碼 的能力。 因 為調試可 以讓程 序員徹底了解程 序的實際執行過程 , 檢查與自己設計時的預想是 否一致 , 如果 不一致 , 那 么很可能預示 着有問題存在 , 應該引起重視 。 另外 , 調試 過程可 以讓 程序員更好的認識到 提高代碼可調試性和代碼質量 的重要性 。 從此 , 自覺的改進編碼方式 , 合理 添加用來支持調 試的代碼 。 編碼 和調 試 是程序員 日常工作中的兩個最 主要任務 , 這兩個任務是相輔相成的 , 編寫 具有可 調試性的高質量代碼 , 可 以明顯提高調試效率 , 節約調試時間。 另 一方面 , 調試可 以讓程 序員真切感受程序的實際執行過程 , 反思編碼和 設 計中的問題 , 加深對軟件和 系統的理解 , 提高對代碼的感知力和控制力。
第三 , 調試工具是學習計算機系統和其它軟硬件知識 的好幫手 。 通過 軟件調試技術的強大觀察能力和 斷點、 棧回溯 、 跟蹤等功能可 以快速的了 解一個軟件和系統的模塊 、 架構 、 和工 作流程 , 因此是學習 其它軟硬件技 術的一 個快速而有效的方 法 。
