使用Windbg和SoS扩展调试分析.NET程序

在博客堂的不是我舍不得 - High CPU in GC(都是+=惹的祸,为啥不用StringBuilder呢?)、 不是我舍不得 - .NET里面的Out Of Memory 看到很多人在问如何分析dump,所以就写下了这篇短文,抛砖引玉。
一、安装 DebuggingToolsforWindows: 从以下 Microsoft 网站下载 DebuggingToolsforWindows: [url]http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx[/url] ,微软经常更新DebuggingToolsforWindows工具的,所以我们下载一个最新版本的,把DebuggingToolsforWindows 安装到 C:\Debuggers 文件夹,从命令行中运行工具需要一个简短的路径,这样更加容易使用。
二、为 WinDbg 中设置符号路径:
1.打开 WinDbg。
2.在 文件 菜单上, 单击 符号文件路径 。 
3.在 符号路径 对话框中, 键入以下符号路径: srv*c:\symbols*[url]http://msdl.microsoft.com/download/symbols[/url] 
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 完全介绍: [url]http://msdn.microsoft.com/msdnmag/issues/06/11/CLRInsideOut/default.aspx?loc=zh[/url] 
深入探索.NET框架内部了解CLR如何创建运行时对象: [url]http://www.microsoft.com/china/MSDN/library/netFramework/netframework/JITCompiler.mspx?mfr=true[/url] 
!dumpheap -gen in ,NET 2.0 SOS that Ships with the Framework: [url]http://dotnetdebug.blogspot.com/2006/12/dumpheap-gen-in-net-20-sos-that-ships.html[/url] 
在托管代码中设置断点(WINDBG) [url]http://blog.joycode.com/gangp/articles/20417.aspx[/url] 
NET Framework 2.0 在内存中加载 Sos.dll 文件时 Windows 错误报告崩溃 FIX:[url]http://support.microsoft.com/kb/913382/zh-cn[/url]
SOS Debugging with the CLR :[url]http://blogs.msdn.com/jasonz/archive/2003/10/21/53581.aspx[/url]
发现并防止托管代码中出现内存泄漏[url]http://msdn.microsoft.com/msdnmag/issues/07/01/ManagedLeaks/default.aspx?loc=zh[/url] 





本文转自 张善友 51CTO博客,原文链接:http://blog.51cto.com/shanyou/74909,如需转载请自行联系原作者
上一篇:提高mysql查询效率的六种方法


下一篇:zookeeper 入门系列 – 理论基础 – zab 协议