使用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

上一篇:Spring 3.x 实践 第一个例子(Spring 3.x 企业应用开发实战读书笔记第二章)


下一篇:FusionCharts使用问题及解决方法(二)-FusionCharts常见问题大全