在 Visual Studio 整合式除錯器普及前,命令列除錯器 cordbg.exe 是 .NET Framework SDK 內建的輕量級除錯工具,類似 Linux 下的 gdb。雖然現代開發多用 IDE,但掌握命令列除錯有助於理解 CLR 執行模型、在無圖形介面伺服器環境排查問題、以及自動化測試腳本整合。本文以 .NET Framework SDK Beta 2 環境為例,完整示範從編譯、啟動除錯器、設定中斷點、單步執行到變數檢視的全流程。
// Test-1.cs
/* Data:2001-12-13 Author:龍山文化 */
using System;
class Test_1
{
static void Main()
{
string str;
Console.WriteLine("Please Enter Your Name. Thanks!");
str = Console.ReadLine();
Console.WriteLine("------------------------------------");
Console.WriteLine("Dear " + str + ", Welcome To Csharps World!");
Console.WriteLine("------------------------------------");
}
}
csc /debug+ /out:Test-1.exe Test-1.cs
/debug+:內嵌 PDB 除錯符號(或產生獨立 .pdb 檔),必須開啟才能對應原始碼行號。Test-1.exe 與 Test-1.pdb。cordbg Test-1.exe
進入除錯器 Shell,提示符 cordbg>。
| 指令 | 縮寫 | 說明 | 範例 |
|---|---|---|---|
run | r | 啟動/重新啟動程式 | run、run arg1 arg2 |
break | b | 設定中斷點 | break Test-1.cs:10、break Test_1.Main |
step | s | 單步進入 | step |
next | n | 單步跳過 | next |
out | o | 跳出目前函式 | out |
print | p | 印出變數/運算式值 | print str、print this |
locals | 列出所有區域變數 | locals | |
where | w | 顯示呼叫堆疊 | where |
threads | 列出所有執行緒 | threads | |
continue | c | 繼續執行至下一中斷點 | continue |
delete | d | 刪除中斷點 | delete 0(編號) |
quit | q | 離開除錯器 | quit |
cordbg> break Test-1.cs:7 // 在 str = Console.ReadLine(); 設中斷點
Breakpoint 0 set at Test-1.cs:7
cordbg> run // 啟動程式
Process started. PID: 1234
Breakpoint 0 hit at Test-1.cs:7
cordbg> locals // 檢視區域變數
str = null
cordbg> step // 單步執行 ReadLine(會等待輸入)
// 在主控台輸入 "Alice" + Enter
cordbg> print str // 檢視變數值
str = "Alice"
cordbg> continue // 繼續執行至結束
Dear Alice, Welcome To Csharps World!
Process exited with code 0.
cordbg> quit
break Test-1.cs:7 if str == "Admin"(需支援版本)。catch System.Exception 讓除錯器在例外拋出時中斷。modload 顯示已載入組件與路徑,排查版本衝突。dump 0x00ad1234 100 以十六進位顯示記憶體內容。| 工具 | 適用場景 | 特點 |
|---|---|---|
| Visual Studio Debugger | 日常開發 | 圖形化、IntelliTrace、熱重載、平行堆疊 |
| dotnet-dbg (SOS/lldb) | Linux/容器/核心傾印分析 | 跨平台、支援 CoreCLR、可自動化腳本 |
| WinDbg + SOS | 生產環境記憶體洩漏/死結分析 | 強大但學習曲線陡峭 |
| VS Code + C# Dev Kit | 輕量級跨平台編輯除錯 | 免費、支援 .NET 6+ |
/debug+ 產生 PDB 符號。cordbg 基本指令:break、run、step/next/out、print/locals、where、continue、quit。dotnet-dbg,但理解底層除錯原理有助於深層問題診斷。