承接上篇文章,本文實戰演示 .NET Framework SDK 內建的命令列除錯器 cordbg.exe 的核心指令操作流程,包含原始碼檢視、中斷點管理、變數監看、單步執行等實戰技巧。
csc /debug+ /optimize- Test-1.cscordbg Test-1.exeTest-1.cs) 必須存在於編譯時的相對路徑,否則僅能檢視反組譯碼
(cordbg) sh
// 顯示當前執行點附近的原始碼
// 若找不到 .cs 檔會報錯:Error loading source file '...': File not found
(cordbg) b 12 // 在第 12 行設定中斷點
Breakpoint #1 has bound to E:\Cs\Test-1.exe.
#1 E:\Cs\Test-1.cs:12 Main+0x0(il) [active]
(cordbg) b // 列出所有中斷點
#1 E:\Cs\Test-1.cs:12 Main+0x0(il) [active]
#2 E:\Cs\Test-1.cs:13 Main+0xa(il) [active]
#3 E:\Cs\Test-1.cs:14 Main+0x10(il) [active]
(cordbg) con // 執行到下一個中斷點
Please Enter Your Name. Thanks!
break at #2 E:\Cs\Test-1.cs:13 Main+0xa(il) [active]
013: str=Console.ReadLine();
(cordbg) next // 單步執行 (下一行,不進入函式)
差異:con 執行到下一中斷點;next 執行下一行 (Step Over)。
(cordbg) p str
str=(0x00ba3414) "龍山文化"
除錯關鍵動作:即時檢視變數實際值,驗證邏輯正確性。
(cordbg) con
龍山文化 // 使用者輸入
break at #3 E:\Cs\Test-1.cs:14 Main+0x10(il) [active]
014: Console.WriteLine("------------------------------------\r\n");
(cordbg) con
------------------------------------
Dear 龍山文化, Welcome To Csharp's World!
------------------------------------
[thread 0x5fb0] Thread created.
[thread 0x59a8] Thread exited.
Process exited.
| 指令 | 功能 | 別名/相關 |
|---|---|---|
| b [行號/函式] | 設定中斷點 | break |
| b | 列出所有中斷點 | |
| cl [編號] | 清除中斷點 | clear |
| con | 繼續執行到下一中斷點 | continue |
| next | 單步執行 (Step Over) | n |
| step | 單步進入 (Step Into) | s |
| out | 跳出目前函式 (Step Out) | |
| p [變數/運算式] | 列印變數值 | |
| sh | 顯示原始碼 | source |
| where | 顯示呼叫堆疊 | callstack |
| threads | 列出所有執行緒 | |
| exit / q | 離開除錯器 | quit |
cordbg 適用於:無 IDE 環境的伺服器、自動化測試腳本、教學示範 IL 層面運作/debug-) 無法有效除錯,僅能看到反組譯碼