偵錯的方針
更新:2007 年 11 月
下列方針會提供幾個用來偵錯程式碼的技術。
必要條件
學習如何使用偵錯工具。
您必須了解並掌握如何使用偵錯工具。如需詳細資訊,請參閱 Visual Studio 偵錯。
熟知保存符號的位置。
每個產品的符號一定都會保存在符號伺服器中,您必須知道要在何處尋找這些伺服器。如需詳細資訊,請參閱 MSDN Library 中的<如何使用 Microsoft Symbol Server> (英文)。
了解並解決造成處理序擱置的 Bug。
對使用者來說,應用程式停止回應 (當機),就如同當機般糟糕。不管怎樣,使用者都將會失去原有的工作,而且必須重新開始。然而,當機一直都被認為難以了解而無法找出解決的方法。就大多數的處理序當機而言,這將不再是個難題。請使用最新的工具和技術來解決這些問題。如需詳細資訊,請參閱 MSDN Library 中的<如何使用 Dr. Watson 進行程式錯誤的疑難排解> (英文)。
學習如何偵錯小型傾印
大多數的軟體測試人員和客戶可能會在沒有善用附加偵錯工具優點的情況下損毀您的程式碼。如果無法輕易地重現問題,那麼您將只能依靠小型傾印 (Minidump) 來解決問題。因此,學習如何利用小型傾印進行偵錯,是非常重要的。如需詳細資訊,請參閱 MSDN Library 中的<小型傾印檔案>(英文)。
學習如何修復損毀的堆疊
修復損毀的堆疊是一件相當複雜的工作,但是卻非常重要,因為有太多的實際工作失敗都有看似難以理解的堆疊。如需詳細資訊,請參閱 MSDN Library 中的<常見的應用程式疑難排解問題:在實際執行環境中進行偵錯>(英文)。
請避免
假設測試會找到所有的 Bug
測試永遠無法找到所有 Bug。這是不可能的,因為程式碼實在太複雜。即使測試能夠找到所有 Bug,您也沒有時間可以修正所有的 Bug。應該要做的是,謹慎設計您的產品,讓產品從一開始就沒有 Bug 存在,這樣可以省去日後修正 Bug 的麻煩。您必須對程式碼的品質承擔全部的責任,測試小組只負責驗證程式碼的品質。請不要依賴軟體測試人員來處理您所造成的麻煩。
建議事項
學習如何偵錯多執行緒應用程式
如果在程式中採用執行緒,可能會造成程式因為新的 Bug 而失敗。隨著執行緒的數量增加,您在單一執行緒環境中執行用來協助偵錯應用程式的每個工作也會變得越來越重要。例如,您可能永遠無法在錯誤發生時就攔截到錯誤。通常可能是稍後才會在其他執行緒中攔截到錯誤。在這些情況中,您可能甚至無法回到呼叫堆疊以尋找問題,因為錯誤是發生在其他執行緒的堆疊中。一般而言,越是主動積極,越有助於偵錯處理序。
學習如何執行遠端偵錯
如果您想要在偵錯其他電腦上的問題的同時,繼續在自己的電腦上工作,就需要用到遠端偵錯。當某段程式碼能夠在開發人員自己的電腦上好好運作,但在其他系統上運作卻發生損毀時,開發人員通常就會執行遠端偵錯。他們會希望不需要坐在其他電腦前面,就能在其他系統上對程式碼進行遠端偵錯。如需詳細資訊,請參閱遠端偵錯安裝。
學習如何在使用中的伺服器上進行偵錯
當您嘗試針對客戶正在存取的使用中伺服器偵錯程式碼時,需要使用不同的偵錯程序。由於有越來越多程式碼是專為網頁而撰寫,因此,這種情形也逐漸普遍。如需詳細資訊,請參閱 MSDN Library 中的<常見的應用程式疑難排解問題:在實際執行環境中進行偵錯>(英文)。
對所有的 Bug 修正加上註解
當您修正 Bug 時,請在程式碼中加入版本號碼、Bug 識別碼和您的別名。如果之後有人查看程式碼,並且對修正有疑問,他們就可以與您連絡,以取得相關資訊。
檢閱所有 Bug 修正
您應該檢閱所有的程式碼修正。請一位 (至少) 人員檢查您的程式碼,也就是同儕檢閱。
在簽入之前驗證細微 Bug 修正
請避免修正同一個 Bug 兩次。您可以利用組建驗證修正是否正確,特別是針對細微的 Bug。
使用測試發行文件報告所有 Bug 修正
將所有的 Bug 修正記錄在測試發行文件 (TRD) 中,並將該文件以電子郵件方式傳送給測試小組,以便與測試小組進行協調。
使用符號伺服器建立索引和保存您的產品符號
您可以藉由讓符號伺服器建立索引並保存您的產品符號,以快速、輕易地從任何系統 (包括客戶系統) 執行偵錯。
不建議事項
在他人不知情的情況下,修正他人的 Bug
能夠研究並嘗試修正他人的 Bug,是一個很棒的練習機會。您會更了解程式碼,並讓自己成為其他人員的支援人手。唯一不可以做的事,就是在未通知程式碼的擁有者有關修正事宜的情況下,就簽入該程式碼的修正。
未嘗試在相同環境中使用相同版本,便將 Bug 判斷為「無法重現」
您必須復原為發現 Bug 的產品版本。請不要假設如果產品的目前版本沒有損壞,就表示 Bug 一定已經修正完畢。事實可能並非如此。程式碼可能已有所變更,只是現在它將 Bug 隱藏起來而已。如果您一直鑽研 Bug 直到中斷出現,您就可能會找到 Bug 的真正根本原因並將之修正,好讓任何電腦都不會再發生這個 Bug。