架構總覽
| 角色 | IP | 關鍵軟體 |
| 除錯主機 | 192.168.0.182 | Visual Studio .NET 2003 |
| 目標主機 | 192.168.0.161 | Remote Debugging Monitor (msvcmon.exe) |
步驟 1:目標主機授權遠端桌面 (方便操作)
- 系統屬性 → 遠端 → 允許遠端連線
- 將除錯主機使用者加入「遠端桌面使用者」群組
步驟 2:共享除錯主機 VS 遠程調試元件目錄
路徑:C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Packages\Debugger
- 右鍵共享 → 共用名稱
Debugger,權限:Everyone 讀取
步驟 3:目標主機複製遠程調試監視器
- 從除錯主機共享資料夾複製整個
Debugger 目錄到本地,如 D:\Debugger
- 確認
msvcmon.exe 存在於 D:\Debugger
步驟 4:共享待除錯程式目錄
- 除錯主機共享專案輸出目錄,如
D:\Projects\MyApp\Bin\Debug,共用名 MyAppBin
- 目標主機對應網路磁碟機:
net use Z: \\192.168.0.182\MyAppBin (或 GUI 對應)
步驟 5:目標主機啟動遠程調試監視器
D:\Debugger\msvcmon.exe -tcpip -anyuser
-tcpip:使用 TCP/IP 傳輸
-anyuser:允許任何使用者連線 (開發環境用,生產需限制)
- 啟動後視窗顯示:
Msvcmon started a new server named '192.168.0.161:4015'. Waiting for connections...
步驟 6:除錯主機 VS 專案設定
- 開啟方案 → 專案右鍵 Properties (屬性)
- Configuration Properties → Debugging
- Debugger Type: Remote via TCP/IP (Native only)
- Remote Machine:
192.168.0.161 (或主機名)
- Remote Command:
Z:\MyApp.exe (目標主機網路磁碟機路徑)
- Remote Working Directory:
Z:\
- Deploy Directory: (可留空)
- Additional Files: (需部署的 DLL/資源檔,用分號分隔)
步驟 7:啟動遠程除錯
- VS 工具列 → Debug → Start (F5)
- VS 會複製檔案到部署目錄、在目標主機啟動程式、附加除錯器
- 斷點、變數監看、呼叫堆疊、記憶體視窗全部可用
常見問題排查
| 現象 | 原因與解決 |
| 連線失敗 / 找不到 msvcmon | 防火牆阻擋 TCP 4015/4016;目標主機未啟動 msvcmon;IP 錯誤 |
| 「Unable to start program」 | Remote Command 路徑在目標主機不存在;網路磁碟機未對應;權限不足 |
| 符號未載入 / 斷點空心 | 專案需產生 PDB;部署目錄需包含 PDB 檔;Tools→Options→Debugging→Symbols 加入 PDB 路徑 |
| Managed 代碼無法除錯 | VS2003 Remote Debugging 僅支援 Native (C++);Managed 需 VS2005+ |
| 目標主機無 Visual Studio 仍可除錯? | 是,只需 msvcmon.exe + PDB + 程式二進位檔 |
進階:命令列參數傳遞
專案屬性 → Debugging → Command Arguments:arg1 arg2 "/path with space"
進階:Just-In-Time 遠程除錯
- 目標主機註冊 JIT:
msvcmon.exe -reg
- 程式崩潰時自動彈出「選擇除錯器」,可選擇遠程 VS 實例
VS 版本對照