即使資深工程師也會寫出 Bug。優秀的開發者擅長發現並修復錯誤;當錯誤隱晦難查時,就需要透過除錯器逐步追蹤程式執行流程。C# 提供強大的 Visual Studio 除錯工具與結構化異常處理機制,助您構建健壯的應用程式。
在除錯模式下執行程式時,VS 會記錄每行程式碼的執行資訊,儲存在 Debug 目錄下的 .pdb 符號檔中,支援斷點、變數監看、呼叫堆疊等功能。
在執行期間向「輸出」視窗寫入訊息,常用兩個方法:
Debug.WriteLine():僅在除錯建置有效。Trace.WriteLine():除錯與發布建置皆有效。需引用命名空間:using System.Diagnostics;
static int MaxNum(int[] a)
{
Debug.WriteLine("sort array begin");
int max = a[0];
int index = 0;
for (int i = 1; i < a.Length; i++)
{
if (max < a[i])
{
max = a[i];
index = i; // 可在此設定斷點觀察變化
}
}
Trace.Write("the index of the biggest number is " + index);
return max;
}

一般開發者只需確保程式正常執行,無需深究除錯器內部運作;專研執行機制的專家才會深入探討。
程式執行時可能發生異常(如檔案不存在、除以零),若不處理會導致程式中止。C# 使用 try-catch-finally 區塊捕獲並處理異常,確保程式穩定運行。
try
{
// 可能拋出異常的程式碼
}
catch (Exception ex)
{
// 異常處理邏輯
}
finally
{
// 無論是否發生異常都會執行的清理程式碼
}
| 異常類型 | 說明 |
|---|---|
| DivideByZeroException | 被零除 |
| NullReferenceException | 參考空物件 |
| IndexOutOfRangeException | 索引超出範圍 |
| FormatException | 格式錯誤(如字串轉數字失敗) |
| FileNotFoundException | 找不到檔案 |
| ArgumentException / ArgumentNullException | 引數錯誤或為 null |
| InvalidCastException | 型別轉換失敗 |
| OutOfMemoryException | 記憶體不足 |
| StackOverflowException | 堆疊溢位(遞迴過深) |
int x1 = 40, x2 = 0, x3;
try
{
x3 = x1 / x2; // 拋出 DivideByZeroException
}
catch (DivideByZeroException ex)
{
Console.WriteLine("錯誤:不能除以零 - " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("其他錯誤:" + ex.Message);
}
finally
{
Console.WriteLine("finally 區塊一定會執行");
}

執行流程說明:try 區塊嘗試執行風險程式碼;若發生異常,catch 依型別比對處理;finally 無條件執行,常用於資源釋放。可撰寫多個 catch 處理不同異常型別。