Windbg断点命令
1. 设置断点命令bu bp bm ba
1) bu bp bm设置软件断点
a). bp设置地址关联的断点
b). bu设置符号关联的断点
c). bm支持设置含通配符的断点,可以一次创建一个或多个bu或bp (bm /d)断点
bp和bu的主要区别
a) bp所设断点和地址关联,如果模块把该地址的指令移到其它地方,断点不会随之移动,而是依然关联在在原来的地址上; 而bu所设断点是和符号关联,如果符号的地址改变了,断点依然保持和原来的符号关联。
b) 如果bp所设断点的地址在加载的模块中被找到,后来软件模块被卸载,断点会被自动移除;而bu所设断点则会一直存在。
c) bp设置的断点不会被保存windbg的workspace中,bu设置的断点会则会被保存下来。
2)ba设置硬件断点(数据断点)
硬件断点是指当一个内存地址被访问(读、写、执行)或IO端口被访问时触发的断点。
2. 其它命令bl bc bd be .bpcmds
bl 列举所有断点和它们的状态
bc 删除对应断点
bd 禁用对应断点
be 启用对应断点
.bmcmds 列举所有断点以及创建它们的命令
3. 软件断点和硬件断点
1) 软件断点 - 调试工具控制的断点。当调试器在某个地址设置一个断点,它会首先把该地址的内容保存,零时插入一条中断指令(如int3 (0xCC)),当程序执行到该地址是cpu进入调试状态,当调试结束,程序重新载入该地址原先的指令重新执行下去。
2) 硬件断点 - 又称为数据断点,是处理器控制的断点,可以用来监控某个内存地址的访问(读、写、执行)和IO地址的访问(读、写)。处理器中有相应的调试寄存器,用来记录数据断点的地址,当该地址(内存地址或IO端口地址)被访问时,断点将被触发,cpu进入调试状态。
3) 软件断点和硬件断点的区别
a)理论上我们可以设置无穷多个软件断点,但设置软件断点会使程序变慢,尤其在内核态影响比较大,调试器大多会对断点数量加以限制。例如Windbg在内核态最多支持32个软件断点,在用户态则支持任意多个;硬件断点数量取决于处理器,例如X86支持四个断点(80386有八个调试寄存器-DR0~DR3用于断点,DR4~DR5保留,DR6~DR7用于控制)。
b)软件断点需要修改相应代码,所以它不能调试时flash和rom中的代码;而硬件则没有这个限制。
3. 参考资料
1. http://www.lslnet.com/linux/dosc1/59/linux-389058.htm
2. http://blog.csdn.net/wingeek/article/details/4025475
3. http://embexperts.com/viewthread.php?tid=69
4. http://msdn.microsoft.com/en-us/library/ff538903%28v=VS.85%29.aspx
5. http://msdn.microsoft.com/en-us/library/ff538165%28v=VS.85%29.aspx
6. http://msdn.microsoft.com/en-us/library/ff553451%28v=VS.85%29.aspx