Debugging Tools for Windows |
ba 命令设置一个数据断点。该断点在指定内存被访问时触发。
用户模式
内核模式
选项 | 行为 |
---|---|
e (执行) | 当CPU取指定地址的指令时中断到调试器。 |
r (读/写) | 当CPU读写指定地址时中断到调试器。 |
w (写) | 当CPU写指定地址时中断到调试器。 |
i (i/o) | (Microsoft Windows XP和之后版本、仅内核模式、仅x86系统)当指定Address的I/O端口被访问时中断到调试器。 |
在Access 和Size 之间不能加入空格
注意 在Windows Server 2003 Service Pack 1 (SP1)上,在基于Itanium的计算机上使用WOW64模拟x86,数据断点的执行选项不能使用,但是可以使用读写选项。
在x64处理器上,该参数可以是1、2、4或者8。但是,如果Access 为e,Size 必须是1。
在基于Itanium的处理器上,该参数可以是从1到0x80000000中任何2的幂。
在Access 和Size 间不能加入空格。
必须使用引号将该命令字符串括起来,并且需要使用分号来分隔多条命令。可以使用标准C控制字符(如\n 和\")。二级引号(\")中的分号被当作引号中的字符串的一部分。
该参数是可选的模式 | 用户模式、内核模式 |
目标 | 仅活动目标 |
平台 | 所有 |
调试器使用ID 号来在之后的bc (Breakpoint Clear)、bd (Breakpoint Disable)和be (Breakpoint Enable)命令中引用该断点。使用bl (Breakpoint List)命令来查看关联到当前设置的所有断点上的ID号。
ba 命令支持由调试寄存器提供的一些功能。可以在特定内存位置被读、写或执行时中断下来。
断点仅在给定地址给定长度的内存被访问时起效。如果被访问的内存仅是和要监控的内存部分重叠,断点不会被触发。
虽然所有断点类型都需要大小,但是执行断点仅在该地址是指令的第一个字节时就可以触发。
在内核模式下调试多处理器系统时,使用bp (Set Breakpoint)或ba命令设置的断点会应用到所有处理器。例如,当前处理器是3并且输入了ba e1 MemoryAddress 来在MemoryAddress 设置一个断点,任何处理器(不止是处理器3)执行到该地址时都会产生断点陷阱。
不能使用ba 命令来为用户模式进程设置初始断点。
不能对相同地址创建多个仅CommandString 值不同的断点。但是,可以在单个地址创建多个不同条件的断点(例如/p、 /t、/c和/C的值不同)。
内核模式调试时,目标机的用户模式和内核模式数据断点有区别。用户模式数据断点不能作用于内核执行或内存访问。根据用户模式代码是否使用了调试寄存器状态和是否有用户模式调试器附加上去,内核模式数据断点可以作用于用户模式的执行或内存访问。
要将当前进程已存在的数据断点应用到另一个寄存器上下文中,可以使用.apply_dbp (Apply Data Breakpoint to Context)命令。
下面的例子说明ba命令的使用。下例对变量myVar 上的4字节读访问设置断点。
下面的命令对从0x3F8到0x3FB 端口上的所有串口访问设置断点。该断点在对这些端口进行任何读写操作时都会触发。
关于如何使用断点的示例和更多信息、其他断点命令和控制断点的方法、如何在内核调试器下设置用户空间的断点,查看使用断点。关于条件断点的更多信息,查看设置条件断点。