前言
Visual Studio 2010 Ultimate 引入 IntelliTrace(智慧型追蹤),徹底改變傳統「中斷點→單步→觀察」的除錯模式。它自動記錄執行歷程中的關鍵事件、方法呼叫進出、參數值、例外狀況,讓開發者能「時光倒流」回到錯誤發生前的狀態,大幅縮短重現與定位 Bug 的時間。本文詳細介紹 IntelliTrace 兩種收集模式、設定方式、歷史除錯操作、遠端記錄重播與多執行緒診斷優勢。
一、兩種收集模式對比
| 模式 | 收集內容 | 效能影響 | 適用場景 |
| IntelliTrace Events Only |
例外、斷點、檔案存取、資料庫查詢、執行緒啟動/結束、模組載入/卸載 |
極低(<5%) |
生產環境長期監控、CI/CD 自動化測試 |
| IntelliTrace Events and Call Information |
包含上述事件 + 所有方法進入/離開、參數值、回傳值、this 物件狀態 |
中高(10-30%+,視呼叫深度) |
開發機深度除錯、複雜邏輯追蹤、多執行緒競態 |
二、啟用與設定步驟
- Tools → Options → IntelliTrace
- 勾選 Enable IntelliTrace
- 選擇收集模式:Events Only / Events and Call Information
- (進階)Modules:指定只收集特定組件(如 `MyApp.*`),減少噪音
- (進階)Events:勾選/取消特定事件類別

三、歷史除錯核心操作
3.1 事件時間軸
- 除錯中斷時,IntelliTrace 視窗顯示時間順序事件清單
- 雙擊事件 → 自動定位至對應原始碼行、呼叫堆疊、區域變數
- 支援篩選:例外、資料庫、檔案、自訂事件
3.2 呼叫堆疊導航
- 選取事件 → Call Stack 面板顯示完整呼叫鏈
- 點選任意框架 → 即時檢視該框架的區域變數、參數、this 狀態
- 無需重新啟動、重新設定中斷點
3.3 變數值歷史追蹤
- 滑鼠停留變數 → DataTip 顯示該時間點的值
- 支援基本型別、物件屬性、集合內容
- Call Information 模式下可查看方法參數/回傳值歷史
四、遠端記錄收集與重播
4.1 收集 .iTrace 檔案
- 測試人員/客戶機器:安裝 IntelliTrace Collection Tool(免費、輕量)
- 命令列啟動:`IntelliTrace.exe start /cp:"MyCollectionPlan.xml" /n:"MyApp" /f:"C:\Traces\MyApp.itrace"`
- 收集完成:`IntelliTrace.exe stop`
4.2 開發機重播
- VS 2010 Ultimate 開啟 `.itrace` 檔案
- 需對應的 `.pdb`、`.dll`、原始碼(最佳)
- 完整重現:呼叫堆疊、變數值、執行緒切換、例外內容
- 解決「我機器正常、客戶機器錯誤」的環境差異難題
五、多執行緒診斷優勢
- 記錄所有執行緒建立/銷毀、鎖取得/釋放、ThreadPool 排程
- Heisenbug(觀測即消失的 Bug):正常速度會發生、單步除錯卻不復現
- IntelliTrace 非侵入式記錄,不改變時序,捕捉真實競態條件
- 事件時間軸可按執行緒篩選,快速鎖定死結、飢餓
六、效能與儲存考量
| 項目 | 建議 |
| 磁碟空間 | Events Only:約 MB 級/小時;Call Information:可達 GB 級/小時,建議限制模組 |
| 環形緩衝區 | 預設 250 MB,可調整;滿時覆寫最舊資料 |
| 生產環境 | 僅啟用 Events Only,搭配收集計畫檔(.xml)精準控制 |
七、總結與資源
- IntelliTrace 將除錯從「空間搜尋(中斷點)」升級為「時空導航(歷史記錄)」
- 核心價值:可重現性、非侵入性、完整上下文
- 延伸閱讀:MSDN Magazine《IntelliTrace: Historical Debugging for Visual Studio 2010》— Justin Marks
善用 IntelliTrace,讓每一次除錯都能「回頭看」,不再盲目猜測、反覆重跑。