自己也在使用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. PositiveSmallIntegerField、SmallIntegerField和IntegerField

    当您在Django中定义模型时,有几种不同的整数字段类型可供选择,包括PositiveSmallIntegerField.SmallIntegerField和IntegerField.以下是这三种整数 ...

  2. 洛谷P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题

    [NOIP2001 普及组] 最大公约数和最小公倍数问题 题目描述 洛谷题目链接:https://www.luogu.com.cn/problem/P1029 输入两个正整数 x, y,求出满足下列条 ...

  3. ceph 003 对osd操作 对存储池操作 存储池配额 存储池快照 pgp

    主机被加入集群时,会自动被分配角色以达到集群的默认状态.(mon,mgr之类) 想要超过默认状态可以进行设置 ceph容器与客户端 ceph集群的客户端 需要 ceph-common 软件包 ceph ...

  4. 我用Awesome-Graphs看论文:解读X-Stream

    X-Stream论文:<X-Stream: Edge-centric Graph Processing using Streaming Partitions> 前面通过文章<论文图谱 ...

  5. web3 产品介绍 Dune Analytics 区块链的数据探索和可视化 链上热点和趋势一手掌握

    Dune Analytics 是一个强大的数据分析平台,旨在帮助用户在区块链上进行数据探索和可视化. Dune Analytics的特点: 数据查询与可视化:Dune Analytics允许用户从多个 ...

  6. 蒸馏网络中的bias是指什么? —— 论文《Distilling the Knowledge in a Neural Network》—— 知识蒸馏

    论文地址: https://arxiv.org/pdf/1503.02531.pdf 在蒸馏网络中会遇到手动调整bias的说法,但是这个bias在论文中又没有明细说明是怎么个bias,具体论文出处: ...

  7. 美国小伙: "American Guy: Only communism can save America!"

    视频地址: https://www.youtube.com/watch?v=Y_WQnXFh8ss 2024大选在即,又是拜登对阵特朗普的旧日重现.在角逐谁的对手反对者更多的畸形内耗中,有一个名为 M ...

  8. 《Python数据可视化之matplotlib实践》 源码 第三篇 演练 第九章

    图  9.1 import matplotlib.pyplot as plt import numpy as np fig=plt.figure() ax=fig.add_subplot(111) f ...

  9. Python 环境傻瓜式搭建 :Anaconda概述

    Anaconda概述 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存.切 ...

  10. Game of CS 题解

    前言 题目链接:洛谷:UVA. 题意简述 Jolly 和 Emily 在玩一个游戏.游戏在一棵编号为 \([0, n-1]\) 的有根树上进行,根节点是 \(0\),每条边都有一个长度,初始所有边都没 ...