使用Windbg和SoS擴展調試分析.NET程序
在博客堂的不是我舍不得 - High CPU in GC(都是+=惹的禍,為啥不用StringBuilder呢?)、 不是我舍不得 - .NET里面的Out Of Memory 看到很多人在問如何分析dump,所以就寫下了這篇短文,拋磚引玉。
一、安裝 DebuggingToolsforWindows: 從以下 Microsoft 網站下載 DebuggingToolsforWindows: http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx,微軟經常更新DebuggingToolsforWindows工具的,所以我們下載一個最新版本的,把DebuggingToolsforWindows 安裝到 C:\Debuggers 文件夾,從命令行中運行工具需要一個簡短的路徑,這樣更加容易使用。
二、為 WinDbg 中設置符號路徑:
1.打開 WinDbg。
2.在 文件 菜單上, 單擊 符號文件路徑 。
3.在 符號路徑 對話框中, 鍵入以下符號路徑: srv*c:\symbols*http://msdl.microsoft.com/download/symbols
4.關閉 WinDbg, 然后鍵入 是 Yes ,以保存基本區信息。
三、SOS 擴展
SOS.dll 中提供的 Son of Strike 擴展 (SOS),用于調試 WinDbg 中的托管代碼。在啟動了調試程序并將其附加到托管進程(或加載故障轉儲)后,您可以通過鍵入以下代碼加載 SOS.dll:
.loadby sos mscorwks
如果您正在調試的應用程序使用的是不同版本的 mscorwks.dll,則該命令無法執行,那么應找到該應用程序使用的 mscorwks.dll 版本的 SOS.dll,然后運行以下命令:
.load <path_to_sos>\sos.dll
SOS.dll 隨 .NET Framework 安裝在 %windir%\microsoft.net\framework\<.NET 版本> 目錄下。SOS.dll 擴展提供了大量用于檢查托管堆的有用命令。有關所有這些命令的文檔,請參閱 SOS 調試擴展 (SOS.dll)。
四、相關的資料:如何調試分析,有幾篇非常不錯的文章,大家自己慢慢去品味吧。
CLR 完全介紹: http://msdn.microsoft.com/msdnmag/issues/06/11/CLRInsideOut/default.aspx?loc=zh
深入探索.NET框架內部了解CLR如何創建運行時對象: http://www.microsoft.com/china/MSDN/library/netFramework/netframework/JITCompiler.mspx?mfr=true
!dumpheap -gen in ,NET 2.0 SOS that Ships with the Framework: http://dotnetdebug.blogspot.com/2006/12/dumpheap-gen-in-net-20-sos-that-ships.html
在托管代碼中設置斷點(WINDBG) http://blog.joycode.com/gangp/articles/20417.aspx
NET Framework 2.0 在內存中加載 Sos.dll 文件時 Windows 錯誤報告崩潰 FIX:http://support.microsoft.com/kb/913382/zh-cn
SOS Debugging with the CLR :http://blogs.msdn.com/jasonz/archive/2003/10/21/53581.aspx
發現并防止托管代碼中出現內存泄漏http://msdn.microsoft.com/zh-cn/magazine/cc163491.aspx
關于異常的疑難解答:System.OutOfMemoryException http://msdn.microsoft.com/zh-cn/library/9w766t6y(VS.80).aspx
歡迎大家掃描下面二維碼成為我的客戶,扶你上云

浙公網安備 33010602011771號