Visual Studio 偵錯 ASP.NET 專案時出現「iis Express Worker Process 已停止工作」,通常是**非受控代碼崩潰(C++/CLI、P/Invoke、第三方 DLL)**、**堆疊溢位**、**存取違規**或**反惡意軟體誤攔**。本文提供系統性排查流程。
| 現象 | 可能原因 | 關鍵線索 |
|---|---|---|
| 啟動專案即崩潰 | 全域靜態變數初始化、Native 模組載入失敗 | 事件檢視器 `Application` 日誌:`Faulting module: clr.dll / ntdll.dll / 第三方.dll` |
| 特定頁面/操作崩潰 | 非受控代碼、P/Invoke 參數錯誤、記憶體洩漏 | 崩潰堆疊含 `Transition from managed to unmanaged` |
| 隨機間歇性崩潰 | 多執行緒競態、GC 壓力大、大物件堆 (LOH) 碎片 | 記憶體用量飆升、Gen 2 GC 頻繁 |
| 安裝 360/騰訊電腦管家後崩潰 | 安全軟體注入 DLL、攔截 CLR 執行 | 模組列表含 `360safe.dll`、`QQPCMgr.dll`、`ShellExt.dll` |
eventvwr.msc → Windows 記錄 → Application
來源: Application Error
事件 ID: 1000
記下:Faulting application name: iisexpress.exe
Faulting module name: <關鍵模組>
Exception code: 0xc0000005 (Access Violation) / 0xc00000fd (Stack Overflow)
VS → 專案屬性 → Web → 偵錯器 → 勾選 "啟用非受控代碼偵錯"
重新偵錯,崩潰時會中斷在原生碼呼叫堆疊
# 系統層面
控制台 → 系統 → 進階系統設定 → 進階 → 啟動和故障恢復 → 設定
寫入偵錯資訊:完整記憶體傾印 / 核心記憶體傾印
# 或用 Procdump
procdump -ma -e 1 -f "" -w iisexpress.exe
| 原因 | 修復 |
|---|---|
| 安全軟體注入 (360/騰訊/火綿等) | **卸載或加入白名單**:`C:\Program Files\IIS Express\iisexpress.exe`、`專案輸出目錄` |
| P/Invoke 簽名錯誤 | 檢查 `CallingConvention`、`CharSet`、`MarshalAs`、結構體對齊 `StructLayout(LayoutKind.Sequential)` |
| 堆疊溢位 | 遞迴深度過大 → 改迭代;或增加執行緒堆疊 `Thread(new ThreadStart(...), 1024*1024)` |
| 存取違規 (0xC0000005) | 非受控碼解參考 null 指標 → 加入空值檢查、啟用 `/RTC` 檢查、使用 SafeHandle |
| VC++ Runtime 缺失/版本錯誤 | 安裝 Visual C++ Redistributable 2015-2022 (x86/x64) |
| 專案目標架構不匹配 | 專案屬性 → Build → Platform target:明確選 x86 或 x64,勿用 "Prefer 32-bit" 混淆 |
# 1. 任務管理器 → 詳細資料 → 找 iisexpress.exe → 右鍵 → 開啟檔案位置
# 2. 將該資料夾加入安全軟體「信任區/白名單」
# 3. 重啟 VS、清理解決方案、重新建置、偵錯
核心排查路徑:**事件檢視器 → 非受控偵錯 → 記憶體傾印 → WinDbg 分析 → 定位 Faulting Module → 修復/移除該模組**。90% 情況為第三方 Native DLL 或安全軟體注入導致。