-- 使用Windbg 的dump等命令分析.Net程序的CPU高、内存高,死锁等问题
【官网】:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools#small-windbg-preview-logo-download-wi
应用场景
WinDbg是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,内存泄露,CPU占用过高,线程死锁等问题的分析,Windbg是一个很强的,无法使用vs时的神器。基础资源
无
使用须知
WinDbg使用须知: 1)确定主机和目标--调试器在主机系统上运行,您要调试的代码在目标系统上运行。 2)确定是进行内核模式调试还是用户模式调试. 3)选择你的调试器环境(visual studio or windbg). 4)如何连接目标主和主机. 5)选择 32 位或 64 位调试工具 6)配置符号. 7)配置源码 8)熟悉调试器操作. 9)熟悉调试技术. 10)使用调试器参数命令。11)针对特定技术使用调试扩展。 12)了解windows内部 .
配置步骤
A)WinDbg下载.
a1)Win10对应的下载地址:
step1)点击下列地址.
Download Debugging Tools for Windows 10
step2)点击[下载安装程序]
step3)安装winsdksetup.exe,仅选择"Debuging tools for windows".
step4)启动WinDbg.
a2)Win7: 使用Windbg需要通过Windows SDK下载.
Microsoft Windows SDK for Windows 7 and .NET Framework 4
[注]其余步骤参考Win10下的操作步骤。
常见问题
-
创建转储文件失败,dump字节数为0
【解决方案】因为待Dump分析的目标程序可能不是64位的,为了确定需要编译时指定x64位 -
!threads没有响应
【解决方案】有时电脑比较慢会延时几秒 -
SOS does not support the current target architecture
【解决方案】方案1)区分C:WindowsSystem32TaskMgr.exe 和 C:WindowsSysWOW64 askmgr.exe 方案2)使用其它的转储工具,例如:ProcessExplorer -
The call to LoadLibrary(C:WindowsMicrosoft.NETFramework64v4.0.30319sos.dll) failed, Win32 error 0n193 %1 不是有效的 Win32 应用程序。
【解决方案】windbg没有使用64位的,如果是win10则建议使用:C:Program Files (x86)Windows Kits10Debuggers64WinDbg.exe
快速入门
A)WinDbg应用分析示例。
a1)查找cpu占用高的程序及位置。
附命令:
.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll
.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
.loadby sos clr
!threads //列出线程
!runaway //查看当前托管线程已执行时间
~~[3b34]s //切换到指定线程:3b34,是osid
!clrstack //查看调用堆栈
a2)查找内存泄漏的程序及位置。
附命令:
.loadby sos clr
!threads
!dumpheap -stat //查看clr的托管堆中的各个类型的占用情况
!DumpHeap /d -mt 00007ff8272059c0 //查看当前的方法表
!DumpObj /d 000001ceb7b964b0 //查看当前char[]的内容
查看存储的具体内容即可分析大概位置
!gcroot 000001ceb7b964b0 查看当前地址的Root。。。
参考资料
- WinDbg Online Help
- windbg调试命令
- WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册
- WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册
- WinDbg 命令三部曲:(一)WinDbg 命令手册
- WinDbg调试C#技巧,解决CPU过高、死锁、内存爆满
- 记一次使用windbg排查内存泄漏的过程
- windbg分析net程序内存泄漏问题
- Windows调试神器:WinDBG
- WinDebug快速使用及调试注意事项
- WinDebug使用
- windebug常用命令
- Windows 调试工具(WinDbg、KD、CDB、NTSD)
- Windows开发入门:工具-WinDbg的安装和使用教程
- Windows下调试工具Windbg入门
- 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏
- 使用WinDbg分析.dump文件找出CPU占用与内存占用的问题根源(转)
- 使用Windbg找出线上程序CPU高问题