PC软件问题定位工具-windbg

  1. windbg工具使用

windbg是微软的工具,可以从百度或微软官网获取。

工具支持:

  1. 分析dmp文件.

  1. 定位CPU、内存、崩溃等异常问题。

  1. 代替VS调试C++程序。

这里主要整理了收集或分析dmp文件的相关命令,方便查阅。

不作为入门教程。

  1. 界面堆栈说明

输入kb命令,可得到堆栈信息:

其中

第1列:当前的栈EBP值。

第2列:当前的栈返回时的返回地址,即调用一个函数执行完后,会返回调用的地方下一条指令执行。

第3-5列:函数参数。

最后列:当前帧的模块!函数+地址偏移

界面左下角的000表示当前处于0号线程的环境内,注意是线程号,而不是线程ID。

每个线程空间有自己的堆栈信息。

  1. 常用命令介绍

  1. 命令格式

xx:内置命令

.xx:扩展命令

!xx:执行xx命令,命令属于外部dll模块。

!aa.xx:调用外部dll模块aa的xx功能

*注意,命令涉及的地址都是16进制。

  1. 创建dmp文件

创建dmp文件命令:

.dump /ma /u x:\xx\xx\a.dmp

命令说明:

.dump: 是命令

/ma:创建full dump,如果/mm则是创建mini dump,

/u: 添加进程ID和日期到dmp文件名。

x:\xx\xx\a.dmp: dmp文件名和保存位置。如果没有路径,则保存到windbg进程目录。

  1. 切换32和64模式

分两步:

1、.load wow64exts:加载外部模块wow64exts.dll

2、!sw: 执行模块wow64exts的sw功能进行切换。必须先加载模块wow64exts。

  1. 继续执行命令

g: 继续执行程序。

  1. 查看地址汇编命令

u addr ln:从地址addr开始反汇编n行,ln是n行,比如l10表示10行,其中l是L。

  1. 查看地址附近函数命令

ln addr: 在地址addr前后查找最近的函数名。

  1. 查找函数或变量命令

x nn!mm*: 在某个dll模块nn中,查找mm开头的函数名或者变量名。

  1. 查看内存命令

da addr: 从地址addr开始,显示32个ansi字符。

db addr: 从地址addr开始,显示32个4字节内存。

dd /c 32 addr: 从地址addr开始,显示32个4字节内容,/c指定内存列数为32。

  1. 查看加载模块命令

lm: 查看进程所有模块,exe和dll等。

lm m xx*:查看进程中xx开头的模块。

  1. 线程操作命令

~: 列举线程和线程号.

~3s: 切换到3号线程,帧和变量在当前线程中,每个线程有独立的调用堆栈。

  1. 帧和变量命令

kbn: 列出调用堆栈,并显示每个堆栈的帧号。

.frame n: 进入帧n中,n是kbn的结果的序号.每一帧表示一个函数内部,涉及堆栈和局部变量、寄存器等。

dv: 查看当前帧有什么变量。

dv /i:查看有什么变量,以及类型,变量值,或者指针的地址。

dt 变量名: 查看变量内容

dt -rn 变量名: 查看变量结构的n层深度,dt -r3 var0

  1. 分析CPU时间命令

!runaway: 查看各线程占用cpu时间,通常可分析CPU高问题。

  1. 分析崩溃命令

!analyze -v: 分析崩溃

  1. 分析c#代码

c#分析加载sos模块,才能解析C#程序的指令集,这里的指令集是微软的.net解释性语言IL (Intermediate Language)。

  1. 加载sos模块命令

.load sos

  1. 查看所有线程命令

!threads

  1. 查看当前线程堆栈命令

!clrstack: 当前线程中堆栈的函数调用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值