自己也在使用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. Android Spingboot 实现SSE通信案例

    SSE SSE(Server-Sent Events)是一种用于实现服务器主动向客户端推送数据的技术,它基于 HTTP 协议,利用了其长连接特性,在客户端与服务器之间建立一条持久化连接,并通过这条连接 ...

  2. 如何正确使用@Bulider与<T>返回数据

    @Data @ToString @Builder @AllArgsConstructor public class PageResult<T> implements Serializabl ...

  3. pytorch问题记录

    1.找不到fused 2.找不到torch_extensions 网上的教程一般都是linux系统的,Windows这个是在C盘目录下 3.c++开发环境中找不到vcvars64.bat 解决方法:重 ...

  4. 备份服务器eBackup

    目录 软件包方式安装eBackup备份软件   1.前景提要   2.创建虚拟机   3.安装备份软件.   4.安装 eBackup 补丁   5.配置 eBackup 服务器   6.访问web界 ...

  5. 自动化测试框架开发python selenium excel POM

    自动化测试框架开发python selenium excel POM 本文主要是采用python selenium excel POM 做UI自动化测试 测试框架选用的是unittest 测试框架用的 ...

  6. Jmeter参数化4-数据库数据引入

    1. 下载jmeter依赖的mysql驱动包 jmeter要连接mysql数据库,首先得下载mysql驱动包.执行"select version()"查看数据库版本 mysql历史 ...

  7. 【Java-GUI】08 Swing02 边框和选择器

    边框案例: package cn.dzz.swing; import javax.swing.*; import javax.swing.border.*; import java.awt.*; pu ...

  8. 【DataBase】局域网访问Windows系统下的MySQL8

    Windows服务主机已经安装好MySQL8并且配置了用户密码 MySQL8更改用户密码: ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' ...

  9. 目前国内全地形能力最强的双足机器人 —— 逐际动力 —— 提出迭代式预训练(Iterative Pre-training)方法的强化学习算法

    相关: https://weibo.com/1255595687/O5k4Aj8l2 该公司对其产品的强化学习训练算法给出了较少的描述: 提出迭代式预训练(Iterative Pre-training ...

  10. Java IO 流详解

    概述 流是一个抽象的概念,代表了数据的无结构化传递.流的本质是数据在不同设备之间的传输.在 Java 中,数据的读取和写入都是以流的方式进行的 在 Java 中,根据数据流向的不同,可以将流分为输入( ...