1.WinDbg检测句柄泄露
!htrace –enable 开启句柄检测
!htrace –snapshot 创建进程句柄镜像
!htrace –diff获得当前进程句柄状态与创建进程句柄镜像时候的差异
Lsa handleLeak!ThreadProc1+0x00000037显示具体源码
2.WinDbg检测内存泄露
gflags.exe设置 Enable heap tagging
!heap –s 记录当前堆内存的现状
!heap –s 再次记录堆内存的状态
!heap -stat -h00970000 查看对应堆的具体信息
!heap -flt s 224 查看堆大小为224的堆块使用者
!heap -p -a 00971d20 查看堆引用的位置
Lsa 显示具体源码
3.WinDbg检测高CPU
!runaway 查看线程占用CPU时间
~2s 切换到2号线程
.frame /c 切换栈帧
4.WinDbg检测死锁
!locks查看所有锁信息
~*kv显示所有线程
RtlEnterCriticalSection 函数的第一个参数就是请求的锁地址
5.Windbg追踪异常
>kv
09a8f644 77ea7e7a 09a8f66c 77e861ae 09a8f674 KERNEL32!UnhandledExceptionFilter+0x2b5 D:/nt/private/windows/base/client/thread.c @ 1753].
>dd 09a8f66c
09a8f66c 09a8f738 09a8f754 09a8f698 77f8f45c
.exr 09a8f738获得异常值
.cxr 09a8f754 获得上下文记录
6.查看虚表
x ole32!OpaqueDataInfo::vftable’ 显示虚表的地址
dds Address 自动搜索显示函数
6.查看getlasterror的值
!gle