前天我有提到如何在 Visual Studio 中利用 Attach to Process 功能可以對任意執行中的程式進行除錯。但有時後程式一啟動就立即發生錯誤,導致程式難以除錯,遇到這種情況其實在 Visual Studio 也是有解的!
首先,先透過 [File] / [Open] / [Project/Solution] 開啟執行檔:
然後直接選取要除錯的執行檔,當成一個專案來開啟。但有一件事必須特別注意,如果該執行檔沒有附帶符號檔(Symbol File)的話,幾乎無法除錯,因為 Symbol File 中包含了許多原本程式的資訊,包括原始檔路徑、程式行數與許多有用的除錯資訊。以下圖為例,ConsoleApplication5.exe 的 Symbol File 就是 ConsoleApplication5.pdb。
開啟後的 Solution Explorer 就會出現該執行檔,此時只要按下 F5 就可以啟動該程式並進入除錯模式了。
當出現例外狀況(Exception)時,Visual Studio 預設會先到你原本編譯時原始檔的目錄下抓取原始檔,用以標示發生錯誤的地方。但如果該程式不是你寫的,或除錯時原始檔不在原本路徑的話,Visual Studio 就會跟你要此程式的原始檔,如果有的話你可以指定給他,若沒有就直接按取消也行。
在這裡我們假設沒有原始碼,按下取消後 Visual Studio 會問你要不要使用 Disassembly 進行除錯,當你使用 Disassembly 進行除錯就會看到最原始的 .NET 原始碼 ( IL )與例外狀況的摘要資訊,當然你也可以按下 View Detail 用以查看完整的 Stack Trace 資訊,有了這些線索通常都可以很順利的找到問題所在。