NET Framework中包含許多工具可以用來更快、更容易地編寫正確的程式。但我們得面臨這樣的情況:出現bugs。不管程式多麼簡單,程式員都可能出錯。根據我的經驗,大多數程式的bugs出現在程式員之間的介面:當一個程式員編寫的代碼被另一個程式員調用時。不知何故,調用者破壞了代碼編寫時做的假設。是誰的過錯呢?這並不要緊,更重要的是你能多快修好它?下面這些技巧將幫你在程式投入使用前更快地發現並解決這些問題。最終,這些技巧會幫你診斷任何的確在使用中出現的問題。
一旦你問了自己這四個問題並作出回答後,把答案放到代碼中。在C#中,用System.Diagnostics.Debug類的Assent方法來表示: public bool ProcessIterations (int numIters){Debug.Assert (numIters > 0,"ProcessIterations.","Iterations must be more than 0"); // More code...
首先,寫一個私用的函數來測試對象的完整性。你在這麼做時,將該方法標為“Conditional”: [Conditional ("DEBUG")]private void ImOK (){Debug.Assert (this != null,"Testing Object State","this cannot be null");// More here.}
然後,在每個公有的方法中,調用ImOK方法: public bool ProcessIterations (int numIters){ImOK ();Debug.Assert (numIters > 0,"ProcessIterations.","Iterations must be more than 0");
首先,在你的程式中為每個類建一個TraceSwitch對象: public class MyClass{private static TraceSwitch myClassSwitch = new TraceSwitch ("MyClassSwitch", "Controls the \ debug output of MyClass");
然後,用WriteIf() 和 WriteLineIf() 方法來記錄任何你覺得有助於你跟蹤你的程式的資訊: public bool ProcessIterations (int numIters){WriteLineIf (myClassSwitch.TraceInfo, "Entering ProcessIterations","CallTrace");ImOK ();Debug.Assert (numIters > 0,"ProcessIterations.","Iterations must be more than 0");