2011-02-10 134 views
2

我有一個Umbraco網站使用公平的用戶控件,其中,某處 - 某種程度上,某種程度上,stackoverflow異常會不時被拋出。 由於當測試與用戶發佈或獲取某些信息(足夠公平:我錯過了某些內容)有關時,SOE不會發生。回溯StackOverflow異常

如何追溯我的代碼中發生了我的stackoverflow異常?有工具可用來檢查我的來源,看看我是否錯過了一些遞歸方法?或者我該如何調試正在運行的進程?

+2

記錄日誌記錄日誌。 –

+0

IIS擴展日誌,數據庫調用日誌記錄,事件查看器..的作品 - 只是似乎無法查明在哪裏。 – riffnl

回答

0

我發現調試應用(有時不得不VS連接到正確的w3wp.exe過程)和異常是最有用的設置VS到休息。您仍然可以看到堆滿了同一系列方法調用的堆棧跟蹤。

+0

在開發機器上 - 這個工程和wooohooo,我終於找到罪魁禍首..由於一個條件,只有在閏年的滿月期間發生,用戶在三年前創建的某個頁面會調用另外三頁這會再次調用第一頁...(很高興我已經分類!) – riffnl

0

如果應用程序崩潰,啓用此註冊表設置來創建一個故障轉儲全部崩潰的應用程序:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps] 
    "DumpFolder"="C:\\TEMP" 
    "DumpCount"=dword:00000010 
    "DumpType"=dword:00000002 

它會在你的C創建故障轉儲:\ Temp文件夾。或者在Visual Studio的新版本中打開這個轉儲文件,它將向您顯示它崩潰的確切代碼(就像如果您在哪裏進行調試並且您有未處理的異常)。

或者一個非常有用的MS工具,可滿足您所有的轉儲分析需求:調試診斷工具(https://www.microsoft.com/en-us/download/details.aspx?id=49924)。視頻演練在這裏:https://channel9.msdn.com/Shows/Defrag-Tools/Defrag-Tools-123-DebugDiag-Part-3

這將分析你的崩潰的應用程序,並顯示你所有的線程及其託管和非託管堆棧跟蹤。 它很可能會指出您的崩潰問題以及發生的位置,因此您可以檢查堆棧跟蹤。

如果程序沒有崩潰,您可以打開任務管理器並右鍵單擊該進程並手動創建轉儲文件。通過調試診斷程序在崩潰分析中發送此轉儲文件時,它將向您顯示應用程序中使用堆棧跟蹤發生的最後一次X異常。當用戶獲得一個很好的簡化錯誤信息時,我使用這種方法來查找用戶應用程序的實際錯誤。作爲從taskmanager創建轉儲的替代方法,您還可以使用procdump.exe或調試診斷本身來創建關於何時創建轉儲文件的規則。

我真的相信更多的人應該知道,一個DUMP文件和調試診斷程序一起發現在生產環境中發生的任何錯誤,我們沒有我們方便的開發工具。