https://wenku.baidu.com/view/4e58744dcf84b9d528ea7a42.html?sxts=1533793949189(参考)
1. windbg根据CPU架构分为不同的版本:
x86
AMD64
IA64
2.可以调试什么
1)APP 2)driver 3) 分析dump
3.windbg vs vc debug
win 调试粒度更小,使用符号文件更多。可以调试驱动。都支持remote debug
都使用dbhelp.dll+dbgeng.dll内核,IDE不同,VC没有把核心所有功能都开放出来。
让vc 获得同样的符号加载功能symsrv.dll拷贝到VC的IDE下
4.用windbg保存dump
F6 attach app后.dump /ma c:\dump\xxx.dmp
detach 否则app会关闭。
dump随时可以产生,只要你会windbg
!analyze -v自动分析 (minidump是没有分析意义的)
-lm看所有thread
~*kb显示所有线程的callstack
调试,分析就是找联系,symbol code 都是联系的桥梁,如果没有pdb怎么办?那image(目标dll exe)就是你主要的桥梁。IDA将是你手中的另一个利器。
5.主动调试应用程序(即attach)
6.被动调试
windbg自动工具Global Flags (StartMenu -> Global Flags)image file debugger (D:\Tools\Windbg.exe)
c:\>sc config kis type=own type=interact
启动kisservice.exe windbg就出来了。
请快速让进程走过RegisterServiceCtrlHandlerEx()否则timeout,进程和windbg都结束,不再有调试机会。
7.被动vs主动
MessageBox vs __asm int 3 ()
windbg.exe -l 为把windbg装上,一崩溃就有windbg调试。
8.命令篇
.exr 显示异常记录
!handle 显示一个handle信息
.thread 切换cur thread
!locks 检查有无死锁
u 反汇编
d db dd 显示指定地址的内存
bp bc bd 下断点 清断点 禁断点
ba 下内存断点
内核调试
用虚拟机VMWARE
windbg.exe
-k com1 pipe,port \\.\pipe\com1
boot menu中:
winxp_sp2[启用调试程序]
联机内核调试是NT自带的一个功能,使用softice可以单机内核调试,但是缺点太多,不再流行。
双机连接流程,调试驱动就像调试APP一样。
双机联调其他方式:
1394卡需要HOST TARGET机都有1394卡虚拟机不模拟
USB XP很麻烦,需要特殊的cable,好像用VMWare可以调试VISTA系统。
实战
update.exe kavstart.exe kwatch.exe 现象是UPDATE.EXE卡死,实际kwatch.exe问题。
二次开发
驱动开发注意问题
WHQL测试