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

简介:
在博客堂的 不是我舍不得 - High CPU in GC(都是+=惹的祸,为啥不用StringBuilder呢?)、  不是我舍不得 - .NET里面的Out Of Memory 看到很多人在问如何分析dump,所以就写下了这篇短文,抛砖引玉。
一、安装 DebuggingToolsforWindows: 从以下 Microsoft 网站下载 DebuggingToolsforWindows:  [url][/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 \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][/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][/url] 
NET Framework 2.0 在内存中加载 Sos.dll 文件时 Windows 错误报告崩溃 FIX: [url][/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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
166 13
|
3月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
3月前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
150 1
|
4月前
|
监控 安全 API
Docker + .NET API:简化部署和扩展
Docker + .NET API:简化部署和扩展
69 1
|
5月前
|
开发框架 .NET C#
VSCode开发.net项目时调试无效
【9月更文挑战第22天】在使用 VSCode 开发 .NET 项目时遇到调试问题,可从项目配置、调试配置、调试器安装、运行环境、日志和错误信息等方面排查。确认项目类型及文件配置,检查 `launch.json` 文件及配置项,确保调试器扩展已安装并启用,验证 .NET 运行时版本和环境变量,查看 VSCode 输出窗口和项目日志文件,检查权限及代码错误。若问题仍未解决,可查阅官方文档或社区论坛。
144 4
|
4月前
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
229 0
|
4月前
|
监控 安全 API
最完美的扩展Docker + .NET API:简化部署和扩展
最完美的扩展Docker + .NET API:简化部署和扩展
124 0
|
5月前
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
|
开发工具 Android开发 数据库
.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
原文:.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序 我不知道人们为什么那么喜欢用HelloWorld来做为自己的第一个程序入门,为什么不是hello **其他的东西或者hi。
958 0

热门文章

最新文章