WinDbg分析

一、基础安装与配置

1. 安装 WinDbg

2. 配置符号路径(关键步骤!)

windbg
 
.sympath SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols
.cache * C:\SymbolCache
.reload

添加应用程序符号:
.sympath+ C:\YourApp\PDB

二、加载 Dump 文件

  1. 图形界面操作:

    • 打开 WinDbg → File → Open Crash Dump

    • 选择你的 .dmp 文件

  2. 命令行操作:

    cmd
     
    windbg.exe -z "C:\dumps\crash.dmp"

三、基本分析命令

命令功能示例
!analyze -v 自动分析崩溃原因 !analyze -v
k 显示当前线程调用栈 k
~ 列出所有线程 ~
~ns 切换到指定线程 ~2s
.dump 创建新转储文件 .dump /ma C:\new.dmp
lm 列出加载的模块 lm
!runaway 查看线程运行时间 !runaway

 

 

四、崩溃分析流程

1. 自动分析崩溃

windbg
 
!analyze -v

查看输出中的:

  • FAULTING_IP:崩溃指令地址

  • EXCEPTION_CODE:异常类型

  • STACK_TEXT:崩溃调用栈

2. 手动分析调用栈

windbg
 
# 查看所有线程
~

# 切换到崩溃线程(通常!analyze会提示)
~0s

# 显示详细调用栈
kv

五、高级调试技巧

1. 内存分析

windbg
 
# 查看内存内容
dc 00007ff6`3fa91000

# 搜索内存中的字符串
s -a 0 L?80000000 "password"

# 检查堆损坏
!heap -s

2. 句柄泄漏检测

windbg
 
# 列出所有句柄类型计数
!htrace -enable
!htrace -snapshot
!htrace -diff

3. 死锁分析

windbg
 
# 检查关键段
!locks

# 分析线程等待链
!wow64exts.sw

4. .NET 应用程序调试

windbg
 
# 加载SOS扩展
.loadby sos coreclr  # .NET Core
.loadby sos mscorwks # .NET Framework

# 常用命令
!dumpheap -stat
!threads
!dumpobject <address>

六、常用扩展命令

扩展命令功能
SOS !dumpheap -stat 统计托管堆对象
SOSEX !dlk 检测死锁
MEX !mex.us 增强栈显示
Time Travel Debugging !tt 时间旅行调试

安装扩展:.load C:\Path\To\sosex.dll

七、自动化分析脚本

创建分析脚本 analyze.wds

windbg
 
.logopen C:\logs\analysis.txt
!analyze -v
~*e !clrstack
!dumpheap -stat
.logclose

执行脚本:

windbg
 
$$>a< "C:\scripts\analyze.wds"

八、实用功能

1. 时间旅行调试(TTD)

cmd
 
# 记录进程
tttracer -out C:\trace C:\app.exe

# 回放分析
windbg -k ttd:replay:C:\trace

2. 远程调试

cmd
 
# 服务器端
dbgsrv -t tcp:port=1234

# 客户端
windbg -premote tcp:server=192.168.1.100,port=1234

3. 内存转储比较

windbg
 
# 加载两个dump
.cmpload C:\dump1.dmp, C:\dump2.dmp

# 比较内存
.cmpmem 00007ff6`3fa91000 L1000



 

 

posted @ 2025-07-09 19:28  卖雨伞的小男孩  阅读(75)  评论(0)    收藏  举报