Asp.net

如何調試 w3wp clr.dll 錯誤

  • August 20, 2013

我的客戶端在兩台生產伺服器上安裝了一個 ASP.NET 應用程序(與 NLB 平衡,但這無關緊要)。兩台伺服器每 3-4 小時崩潰一次,並記錄以下事件查看器錯誤:

錯誤應用程序名稱:w3wp.exe,版本:7.5.7601.17514,時間戳:0x4ce7afa2

錯誤模組名稱:clr.dll,版本:4.0.30319.18034,時間戳:0x50b5a783 異常

程式碼:0xc00000fd 錯誤偏移量:0x000000000001a840

錯誤程序
應用程序啟動時間:0x01ce97fe076d27b4

錯誤應用程序路徑:c:\windows\system32\inetsrv\w3wp.exe

錯誤模組路徑:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 報告 ID:e0c90a5f-0455- 11e3-8f0e-005056891553

我不知道如何調試或從哪裡開始。當崩潰即將發生時,伺服器處理器的使用率會躍升至 100% 並保持在那裡。出錯的程序是 w3wp.exe。我什至不確定我的程式碼是否產生了錯誤。它是 IIS 7.5。任何指針將不勝感激。

看起來你有一個 StackOverflow 異常,這是由無限遞歸(一個函式重複呼叫自身等)引起的。這不能被正常的 try/catch 塊擷取。您可以使用DebugDiagWinDbg跟踪問題。

可以將 DebugDiag 配置為在發生 StackOverflowException 時生成故障轉儲。在<https://www.microsoft.com/en-us/download/details.aspx?id=58210>下載。

  1. 打開 DebugDiag 並點擊添加規則。
  2. “崩潰”應該已經被選中。點擊下一步。
  3. 選擇“特定的 IIS Web 應用程序池”,然後點擊下一步。
  4. 選擇應用程序池,然後點擊下一步。
  5. 您應該在“高級配置”視窗中。點擊高級設置下的例外。
  6. 點擊添加異常並選擇堆棧溢出,操作類型為完整使用者轉儲
  7. 點擊確定並保存並關閉。

下次發生 StackOverflowException 時,您將有一個故障轉儲。現在需要解釋轉儲文件。

Windows 調試工具是 Windows SDK 的一部分,可以在 <http://msdn.microsoft.com/en-US/windows/hardware/gg463009/>下載。

  1. 要使用 WinDbg,您需要獲取符號文件。下載符號文件並將它們放在本地文件夾中。
  2. 打開WinDbg。在文件菜單上,點擊符號文件路徑。
  3. 在符號路徑框中,文件說要鍵入以下命令:SRV*your local folder for symbols*http://msdl.microsoft.com/download/symbols,但是我只是將符號放入本地文件夾中,它工作正常。
  4. 退出並再次打開 WinDbg,然後打開 Crash Dump 並找到由 DebugDiag 創建的轉儲文件。
  5. 在命令行中,鍵入.loadby sos clr
  6. 現在輸入!CLRStack

在結果中,應該清楚問題是什麼(您可能會看到一堆行顯示重複呼叫的函式)。

引用自:https://stackoverflow.com/questions/18335678