自己也在使用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常用命令及分析套路的更多相关文章

  1. 【转载】windbg 常用命令详解

    windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...

  2. windbg常用命令

    SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols CPU常用命令 载入sos.dll  执行.load C:\Windows\Micr ...

  3. windbg 常用命令详解

    = kd> ln 8046e100 (8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!MmSectionExtendRes ...

  4. WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS

    dg (Display Selector) dg命令显示指定选择器的段描述符. dg FirstSelector [LastSelector] 参数: FirstSelector指定要显示的第一个选择 ...

  5. WinDBG 常用命令表[转]

    启动, 附加进程, 执行和退出(Starting, Attaching, Executing and Exiting) =======================   Start -> Al ...

  6. WinDbg常用命令系列---!uniqstack

    简介 这个!uniqstack扩展扩展显示的所有线程的堆栈的所有当前进程,不包括显示为具有重复项的堆栈中. 使用形式 !uniqstack [ -b | -v | -p ] [ -n ] 参数 -b将 ...

  7. WinDbg常用命令系列---.cmdtree

    .cmdtree 简介 使用形式 .cmdtree cmdfile 参数 cmdfile命令文件,包含多个你需要的命令.必须是一个文本档 使用步骤 1.使用命令创建文本文件test.wl,使用以下示例 ...

  8. WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)

    .write_cmd_hist 简介 .write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件. 使用形式 .write_cmd_hist Filename 参数 Filename指定 ...

  9. WinDbg常用命令系列---!dlls

    !dlls 简介 !dlls扩展显示所有加载模块或指定线程或进程正在使用的所有模块的表条目. 使用形式 !dlls [Options][LoaderEntryAddress] !dlls -h 参数 ...

  10. WinDbg常用命令系列---!cppexr

    !cppexr 简介 !cppexr显示C++异常记录的内容. 使用形式 !cppexr Address 参数 Address指定要显示的C++异常记录的地址. 支持环境 Windows 2000 E ...

随机推荐

  1. 30K Star,最全面的PDF处理开源项目,你也可以拥有一个本地的PDF处理大全

    大家好,我是程序猿DD 今天给大家推荐一个日常大概率能用上的开源项目:Stirling PDF 开源地址:https://github.com/Stirling-Tools/Stirling-PDF ...

  2. Vue 给mapState中定义的属性赋值报错的解决方案

    Vue 给mapState中定义的属性赋值报错的解决方案 by:授客 QQ:1033553122 1.   实践环境 Vue 2.9.6 2.   问题描述 <script> import ...

  3. 关于SpringBoot中事务回滚没有生效

    在SpringBoot中,事务回滚可以用注解@Transactional标识. Spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作. 1.非检查型异常 ...

  4. Git的存储原理

    目录 Git 设计原理 Git vs SVN Git 存储模型 .git 目录结构 Git 基本数据对象 Git 包文件 Git 引用 Git 设计原理 概括的讲,Git 就是一个基于快照的内容寻址文 ...

  5. Spring AOP概念及原理

    Spring AOP(面向切面编程) 以下内容由ChatGPT生成 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过分离关注点来提高程序的模块化. ...

  6. 算法·理论:KMP 学习笔记

    \(\text{KMP}\) 笔记! 上次比赛,出题人出了一个 \(\text{KMP}\) 模板,我敲了个 \(\text{SAM}\) 跑了,但是学长给的好题中又有很多 \(\text{KMP}\ ...

  7. 【GPU】如何两周内零经验手搓一个GPU | 美国工程师极限挑战 | 重写三次 | CUDA | SIMD | ISA指令集 | Verilog | OpenLane

    地址: https://www.youtube.com/watch?v=FTh-c2ek6PU

  8. 日本联合研究团队发布 Fugaku-LLM——证明大型纯 CPU 超算也可用于大模型训练

    相关: https://mbd.baidu.com/newspage/data/landingsuper?context={"nid"%3A"news_101396655 ...

  9. 【转载】 Tensorflow如何直接使用预训练模型(vgg16为例)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_44633882/artic ...

  10. 树莓派3B+ 安装开源软路由 openwrt 并设置 无线网桥

    在openwrt官网上找到最新版的下载地址: https://openwrt.org/releases/19.07/start 注:   本文中使用的openwrt 系统为最新的稳定版系统,自带web ...