1、运行一个exe文件,发生中断
Ctrl Alt Delete打开任务管理器-->详细信息-->选择对应的应用名称,右键选择创建转储文件,等待文件创建完成。
2、打开WinDbg工具
2.1 设置符号表的方式
选择File>Symbol File Path,设置pdb文件的位置为待调试exe的pdb文件(即testWindbg.pdb)所在位置。内容为:pdb文件和exe文件所在的目录;SRV*e:mysymbol* http://msdl.microsoft.com/download/symbols
路径以‘;‘(分号)为分隔,mysymbol为本地缓存符号的目录
2.2 设置源代码路径
选择File>Source File Path,设置源代码文件的位置为待调试exe的源码文件(即main.cpp)所在位置,即是源代码所在的目录。
2.3 打开带调试的可执行文件
选择File>Open Executable,打开待调试exe,若需要外部参数可以填在Arguments中。
2.4 问题
1)填入符号表后界面出现 *** ERROR:Symbol file could not be found.Default to export symbols for ntdll.dll
不需要理会,会在后续自动进行加载,使用lm查看加载的模块,会发现已经加载。
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:WindowsSysWOW64RPCRT4.dll -
ModLoad: 00000000`776a0000 00000000`77760000 C:WindowsSysWOW64RPCRT4.dll
3、调试——定位程序崩溃的原因
1)输入.reload命令重新加载符号
2)输入指令g执行线程(会在程序结束、遇到断点或者其他造成调试器停止的事件发生时停止)
(4ba4.3f94): WOW64 breakpoint - code 4000001f (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
说明: 暗示本程序运行时会有问题。
3)继续执行g
直到按下某个键时,出现定位到某行代码位置(该行代码引起程序崩溃),WinDbg界面会提示崩溃的原因。
4、断点调试
1)输入.reload命令重新加载符号
2)使用bp命令设置断点
bp 函数名
bp ‘main.cpp:3‘,在main函数第三行代码处设置断点
bp main 5c,在main函数偏移5c位置设置断点
x 可执行文件名!*char*查找相关函数名后,用bp指令在某个函数设置断点(bp 地址/bp 函数名)
bl 列出当前存在的断点和他们的状态
bc 移除一个或多个断点
bd 暂时禁用一个或多个断点
be 重新启用一个或多个断点
ba 设置数据断点。这种断点在指定内存被访问时触发
br 修改一个已存在的断点的ID
3)g
Breakpoint 0 hit
......
......
说明运行到断点位置
4)单步调试p或F10
5)单步跳入t或F11
6)单步跳出gu或Shift F11
7)查看变量
dv:局部变量
dv /i:局部变量, 并显示符号的类型和参数类型
dv /V:局部变量, 并显示变量的存储位置.
dt:命令显示局部变量、全局变量或数据类型的信息。它也可以仅显示数据类型。即结构和联合(union)的信息
dv tt
dt tt
db:查看某个内存的字节值和ASCII字符
dc:命令查看查看某个内存的双字值和ASCII字符
du:命令查看Unicode字符