Windbg常用命令及分析套路
自己也在使用windbg分析问题,但是属于刚入门所以转发下大神的总结:https://www.cnblogs.com/fj365/p/13295453.html
常用
!threadpool 查看线程池CPU使用量
!threads 查看所有托管线程情况
!clrstack 某个线程托管代码的调用栈情况
~*e!clrstack 所有线程托管代码的调用栈情况
!runaway 查看线程占用CPU时间
~ s 切换到指定线程(number为具体哪个线程的ID)
!dumpstackobjects(!dso) 本线程调用栈所有对象实例
!dumpdomain 显示所有域里的程序集,或者根据参数获取指定域。
!savemodule 根据具体程序集地址,把当前程序集的代码生成到指定文件
!PrintException(!pe) 显示在当前线程上引发的最后一个异常错误信息
!VerifyHeap 检查垃圾回收器堆中是否有损坏迹象,并显示找到任何错误
!SyncBlk –all 显示所有SyncBlock 结构情况
查看对象
基本
!DumpObj <对象地址> 查看对象
!DumpArray <对象地址> 查看数组
!sosex.mdt <对象地址> 查看对象
!sosex.mdt -e <对象地址> 查看数组
!netext.wdo <对象地址> 查看对象
限定大小
!dumpheap -min -max 查看大小在size1~size2的对象
!dumpheap -min 查看大于size字节的对象
限定类型
!dumpheap -mt -min -max
查看MethodTable结构的对象
!dumpheap –type
查看类型名字子串匹配指定字符串的对象
限定地址范围
!dumpheap start [end] 查看指定地址范围的对象
查看内存
!eeheap -gc 查看GC堆,查看GC堆上的内存占用是多大
!eeheap –loader 查看Loader堆
!dumpheap –stat GC堆上的统计,看GC堆上存活的对象是那些
!dumpheap -mt 查看该地址上的对象
!dumpheap –type 通过 type 参数查看内存中指定类型的对象
!gcroot <对象地址> 得到这个对象的引用"根"
!objsize <对象地址> 查看对象占用多大的内存(不一定准)
!name2ee TestClass.exeTestClass.Program.test //显示test方法相关的地址
!dumpmt -md 00976d48 //得到类的成员函数详细信息
!dumpmt 找到相关MethodTable处的有关信息
!dumpmd 根据MethodDesc找到相关模块信息,比如MethodTable.
!dumpdomain 显示所有域里的程序集,或者根据参数获取指定域。
!dumpil 00973028 显示这个方法被编译器编译之后的IL代码
!dumpmodule 1ee30010 查看某个模块的详细信息
检查GC的终结队列及线程
!FinalizeQueue 显示为终结(finalization)而登记的所有对象。
重点看“Ready for finalization XX objexts”
!ThreadPool 显示托管线程池的有关信息。
如果“CPU utilization 81%”表示当前很可能在执行GC回收,此时Work Request in Queue会增长(因为CPU超过80%不会创建新线程)。
!Threads 显示进程中所有的托管线程。
关注Exception列,标记为“(Finalizer)”的表示这条为终结器线程、标记有“(GC)”的表示这条线程上在执行GC操作、
查看线程调用
查看调用堆栈,然后进一步查看相关调用方法的参数,推断调用逻辑;
~<线程>e!clrstack 查线程调用堆栈
~*e!clrstack 查所有线程调用堆栈
~<线程>e!clrstack –a 查线程调用堆栈(含参数对象地址)
~<线程>e!dso 查线程上所有对象–>根据类型找到要查看对象的地址
!do <对象地址> 查看对象信息
!sosex.mdt–e <对象地址> 查看对象信息(数组)
查看异常
PrintException [-nested][]
-或者-
PE [-nested][]
编排格式并显示在指定地址上的任何Exception类派生对象的字段。如果你没有指定一个地址,PrintException命令显示当前线程上最近抛出的异常。
-nested 选项详细显示嵌套的异常对象。
你可以使用这个命令编排格式并查看_stackTrace字段,这是一个二元数组。
!analyze -v -hang
displays information about the currentexception or bug check.
.foreach (ex{!dumpheap -type Exception -short}){.echo“********************************”;!pe -nested ${ex} }
定位“锁”
!sosex.dlk 检查死锁
!SyncBlk
扩展
sosex
http://www.stevestechspot.com/default.aspx
先创建堆上对象的索引!bhi
!mdt -e 00000000450bc560
netext
http://netext.codeplex.com/SourceControl/latest
Psscor4
https://www.microsoft.com/en-us/download/details.aspx?id=21255
编写Windbg扩展
https://www.codeproject.com/Articles/6522/Debug-Tutorial-Part-Writing-WINDBG-Extensions
Windbg常用命令及分析套路的更多相关文章
- 【转载】windbg 常用命令详解
windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...
- windbg常用命令
SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols CPU常用命令 载入sos.dll 执行.load C:\Windows\Micr ...
- windbg 常用命令详解
= kd> ln 8046e100 (8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!MmSectionExtendRes ...
- WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS
dg (Display Selector) dg命令显示指定选择器的段描述符. dg FirstSelector [LastSelector] 参数: FirstSelector指定要显示的第一个选择 ...
- WinDBG 常用命令表[转]
启动, 附加进程, 执行和退出(Starting, Attaching, Executing and Exiting) ======================= Start -> Al ...
- WinDbg常用命令系列---!uniqstack
简介 这个!uniqstack扩展扩展显示的所有线程的堆栈的所有当前进程,不包括显示为具有重复项的堆栈中. 使用形式 !uniqstack [ -b | -v | -p ] [ -n ] 参数 -b将 ...
- WinDbg常用命令系列---.cmdtree
.cmdtree 简介 使用形式 .cmdtree cmdfile 参数 cmdfile命令文件,包含多个你需要的命令.必须是一个文本档 使用步骤 1.使用命令创建文本文件test.wl,使用以下示例 ...
- WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)
.write_cmd_hist 简介 .write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件. 使用形式 .write_cmd_hist Filename 参数 Filename指定 ...
- WinDbg常用命令系列---!dlls
!dlls 简介 !dlls扩展显示所有加载模块或指定线程或进程正在使用的所有模块的表条目. 使用形式 !dlls [Options][LoaderEntryAddress] !dlls -h 参数 ...
- WinDbg常用命令系列---!cppexr
!cppexr 简介 !cppexr显示C++异常记录的内容. 使用形式 !cppexr Address 参数 Address指定要显示的C++异常记录的地址. 支持环境 Windows 2000 E ...
随机推荐
- UE4 WebUI使用指南2-通信
前面一篇WebUI的文章讲述的WebUI插件的下载,开启,在UE中创建,加载网页等. 本文继续讲述通过WebUI,UE和网页实现双向通信的实现思路. 一点说明 由于WebUI 使用的浏览器内核并不是最 ...
- API引用在Element UI (Vue 2)和Element Plus (Vue 3)中的不同
API 变动 样式类名变化: 一些组件的样式类名有所变动,可能需要更新你的自定义样式. 事件名和属性名变化: 某些组件的事件名和属性名发生了变化,需要检查 Element Plus 文档 以了解详细信 ...
- 【数学建模导论】Task01 数据处理与拟合模型
0 前言 感谢 DataWhale 的开源学习课程 intro-mathmodel,项目仓库在这. 现在开始,跟着Task01 进入数据类的学习,实现每一个代码,包括数据预处理.回归分析与分类分析.假 ...
- 开源照片管理神器 PhotoPrism 安装和使用教程
如今我们每个人都积累了海量的照片和视频,做自媒体的 UP 主们积累的照片和视频数量可能更多.面对这么多的照片和视频,我们该如何管理呢? 之前我一直用谷歌相册,因为它有很多优势,比如无限空间,支持智能整 ...
- RPA处理京东滑块拼图验证码
在进行京东商家后台企业账号的RPA自动化操作过程中,登录环节是必不可少的步骤.然而,这一过程中有时会遇到一种特殊的验证机制--滑块拼图验证码,它的突然出现如同一道屏障,阻碍了自动化的顺利进行.因为只有 ...
- 【转载】 linux中umask命令介绍
版权声明:本文为CSDN博主「立二拆四i」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/weixin_4408 ...
- 2023年3月份至2024年3月份CCF会议情况——人工智能领域
April 2, 2023: https://2023.ecmlpkdd.org/submissions/key-dates-deadlines/ ECML-PKDD (Europe ...
- [工具分享]ClipX超级粘贴板,超级好用
1.背景 话说粘贴.复制是码农们的必备核心技能, 普通码农们当然已经熟练的掌握了普通的粘贴复制.... 但是,你不知道的是,牛逼的架构师已经会使用超级粘贴板了,功能非常强大 ............. ...
- php 常用文件操作
判断文件或文件夹是否存在 file_exists() 打开文件 fopen() 关闭文件 fclose() 判断是否可写入 is_writable() 写入数据 fwrite() 测试文件指针是否到了 ...
- Ambiguous Mapping 的处理方法
出现原因:两个不同的Controller 中出现相同映射路径 eg: AController:/v1/wdnmd/userList/list BController:/v1/wdnmd/userLis ...