再優秀的程序員在編程的過程中也會犯些錯誤,何況是我們這些初級程序學者;好的程序員會找出一些錯誤並修改它們.有時候程序中存在一些微妙的錯誤我們發現不了的時候就得跟蹤代碼進行調試.
一.Visual Studio中的調試
在調試模式下運行程序時,運行的是編寫好的代碼.調試程序的信息在VS執行每行代碼過程中發生了甚麼都有記錄,這些信息保存在Debug目錄下的.pdb格式文件中.
在運行期間把文本寫入Output窗口是非常簡單的.此時可以使用一下兩個命令:
Debug.WriteLine()
Trace.WriteLine()
這兩個命令函數的使用方法差不多,區別在第一個命令是在調試模式下運行而第二個還可以用於發布程序.引用這兩個函數還要在命名空間中加入: using System.Diagnostics;
static int MaxNum(int[] a)//
{
Debug.WriteLine("sort array begin");
int max = a[0];
int index;
for (int i = 1; i < a.Length; i++)
{
if (max < a[i])
{
max = a[i]; //中斷點設計
index = i;
}
}
Trace.Write("the index of the bigest number is");
return max;
其實有關調試的問題都可以自己解決,只有那些專門研究程序運行過程實現的人才會去關注Debug的過程,一般我們在發現程序沒有錯誤可以運行的時候就不關心具體的執行過程.
二.異常處理.
在程序運行過程中存在異常,例如在打開文件的時候要判斷文件是否存在才能打開,如果不存在就可能引起異常導致程序中止.如果可能存在異常就要用一下的方法處理.,以保證程序正常運行.
try
{
<可能包含異常的執行過程>
}
catch(Exception 捕獲異常)
{
<異常處理>
}
finally{<最終會做甚麼>
}
異常的類型:1基本Exception.2: Application Exception類
3 與參數有關的異常類: ArgumentException類Format Exception類:
4: 與成員訪問有關的異常MemberAccessException類,該類包括三種子類
FileAccessException類: MethodAccessException類:
MissingMemberException類:
下來的例子在數據處理過程中很常見.
int x1 = 40;
int x2 = 0;
int x3;
Label re = new Label();
re.Text=Convert.ToString(x1/x2)
執行結果是
Try---catch---finally的異常處理模式是這樣的執行的.
Try是程序意圖做甚麼,Catch是捕獲Try過程中可能出現的異常,如果有異常的話而且異常和Catch的類型一樣,Catch處理異常.finally中的代碼不管有沒有異常都會執行.當然可以有多個Catch來處理捕獲程序執行過程中可能出現的多個異常.
這裡就不多說了.下面列舉出C#處理過程中存在的不同異常類型.,
MemberAccessException 訪問錯誤:類型成員不能被訪問
ArgumentException 參數錯誤:方法的參數無效
ArgumentNullException 參數為空:給方法傳遞一個不可接受的空參數
ArithmeticException 學計算錯誤:由於數學運算導致的異常,覆蓋面廣。
ArrayTypeMismatchException 數組類型不匹配
DivideByZeroException 被零除
FormatException 參數的格式不正確
IndexOutOfRangeException 索引超出范圍,小於0或比最後一個元素的索引還大
InvalidCastException 法強制轉換,在顯式轉換失敗時引發
MulticastNotSupportedException 不支持的組播:組合兩個非空委派失敗時引發
NotSupportedException 調用的方法在類中沒有實現
NullReferenceException 引用空引用對象時引發
OutOfMemoryException 無法為新語句分配內存時引發,內存不足
OverflowException 溢出
StackOverflowException 棧溢出
TypeInitializationException 錯誤的初始化類型:靜態構造函數有問題時引發
NotFiniteNumberException