windbg调试

windbg调试

windbg作为windows平台进行堆栈分析、排查错误的利器,主要用到的功能如下:

1.基础

1.1 分析已有的dmp

针对软件崩溃时自动生成了dmp文件或已有崩溃文件的情况

  • step1:设置符号路径:file->symbol file path;

  • step2: 打开dmp文件

   方法1:拖动dmp文件到窗口内;
   方法2:file->open crash dump
  • step3:开始分析,无论是什么问题,先用如下分析下,查看堆栈信息,而后针对具体情况分析。

!analyze -v

1.2 windbg调试进程

当在测试机没有调试所需的VS环境或者不存在代码时,可以直接通过windbg调试程序

  • step1:启动软件,

  • step2(可选):设定值符号文件的路径,file->symbol file path;

  • step3:附加到待调试的进程:file->attach to process

 可以通过进程的名称;
 进程ID

快速寻找需要调试的进程

  • step4:命令输入框,直接输入g或者按F5,启动调试

2保存dmp文件

2.1 windbg保存dmp文件

在用windbg调试程序时,可以将当前的堆栈信息保存为dmp文件,一则可以收集信息,方便后续分析,二则可以将dmp文件分享给同事或库的提供者进行协同分析。windbg保存dmp文件的命令有三种形式,推荐使用第二种形式

  • 方式一:

.dump /m 路径名

生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较 少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。

示例:.dump /m C:\dumps\myapp.dmp

  • 方式二:

.dump /ma 路径名

包括完整的内存内容、句柄、未加载的模块,等等,文件很大,

示例:.dump /ma C:\dumps\myapp.dmp

  • 方式三:

.dump /mFhutwd 路径名

带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案

示例:.dump /mFhutwd C:\dumps\myapp.dmp

2.2任务管理器保存dmp文件

当程序处于无响应状态时,程序必定是存在异常,在找到确切的原因前,不能够贸然强制退出程序,尤其是针对偶现的现象,一旦退出,可能要自己复现成千上百次且无法复现出问题。为了保护好现场,需要将当前的堆栈信息保存下来。切记,一定要保存下来,这是有血的历史教训的。
方法如下:

 打开任务管理器
 找到当前进程
 邮件
 创建存储文件

线程

输出线程的命令如下

~ 简洁地显示当前进程的所有线程,

~. 表示当前线程

~# 表示异常或者产生调试事件的线程

~* 表示所有线程

~1 表示一号线程

堆栈

输出堆栈的命令如下

k // 显示当前堆栈

kb // 显示当前堆栈,包括显示传递给堆栈跟踪中每个函数的前三个参数

kp // 显示当前堆栈,显示传递给堆栈回溯中的每个函数的所有参数

~0k // 显示第0个线程的堆栈,主线程

死锁

死锁是非常棘手的问题了.

复习下死锁产生的原因

  • 互斥
  • 请求并保持
  • 不可剥夺
  • 循环等待

针对死锁问题,加载dmp文件后,

  • 在命令行输入如下命令后,可以查看所有线程占用的锁,根据信息中OwningThread参数可以知道当前获得锁的线程ID,

!locks

  • 依据线程ID查找线程编号,假设线程编号为015,

view->process and Threads->根据表格找到对应值

  • 输入如下命令,查看线程的堆栈

~nkb //n为获得的编号

命令行操作技巧

  • 上下箭头:查找之前的命令
  • BACKSPACE, DELETE, INSERT, 和所有箭头编辑命令
  • tab键自动补全命令
  • esc清楚当前行
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值