断点是在可执行代码中的位置,作系统停止执行并中断调试器。 这样,就可以分析目标并发出调试器命令。
可以按虚拟地址、模块和例程偏移量或源文件和行号(在源模式下)指定断点的位置。 如果在没有指定偏移量的例程中放置断点,则输入该例程时将激活断点。
有几种其他类型的断点:
断点可以与特定线程相关联。
断点可以允许在触发之前通过地址的固定次数。
当触发断点时,断点可以自动执行某些命令。
可以在非可执行内存上设置断点,并监视要读取或写入的位置。
如果要在用户模式下调试多个进程,则断点集合取决于当前进程。 若要查看或更改进程的断点,必须选择进程作为当前进程。 有关当前进程的详细信息,请参阅 控制进程和线程。
用于控制和显示断点的调试器命令
若要控制或显示断点,可以使用以下方法:
使用 bl (断点列表) 命令列出现有断点及其当前状态。
使用 .bpcmds (显示断点命令) 命令列出所有断点以及用于创建断点的命令。
使用 bp (设置断点) 命令设置新的断点。
使用 bu (Set Unresolved Breakpoint) 命令设置新的断点。 使用 bu 设置的断点称为未解析断点;它们具有与使用 bp 设置的断点不同的特征。 有关完整详细信息,请参阅未解析的断点(bu 断点)。
使用 bm (设置符号断点) 命令在与指定模式匹配的符号上设置新的断点。 如果包含 /d 开关,则带 bm 的断点集将与地址(如 bp 断点)相关联;如果未包含此开关,它将无法解析(如 bu 断点)。
使用 ba (中断访问) 命令设置 处理器断点,也称为 数据断点。 可以在内存位置被写入、读取、作为代码执行或发生内核 I/O 时,触发这些断点。 有关完整详细信息,请参阅处理器断点(ba 断点)。
使用 bc (断点清除) 命令永久删除一个或多个断点。
使用 bd (断点禁用) 命令暂时禁用一个或多个断点。
使用 be (断点启用) 命令重新启用一个或多个禁用的断点。
使用 br (断点重新编号) 命令更改现有断点的 ID。
使用 bs (更新断点命令) 命令更改与现有断点关联的命令。
使用 bsc (更新条件断点) 命令可更改现有条件断点发生的条件。
在 WinDbg 中,有几个用户界面元素有助于控制和显示断点。 请参阅在 WinDbg 中设置断点(经典)。
每个断点都有一个十进制数,称为与之关联的断点 ID。 此数字标识各种命令中的断点。
断点命令
您可以在断点命中时自动执行一个命令。 例如,以下命令在 MyFunction+0x47 中断,写入转储文件,然后恢复执行。
0:000> bu MyFunction+0x47 ".dump c:\mydump.dmp; g"
注意如果要从内核调试器控制用户模式调试器,请不要在断点命令字符串中使用 g (Go)。 串行接口可能无法跟上此命令,并且无法重新进入 CDB。 有关这种情况的详细信息,请参阅 从内核调试器控制 User-Mode 调试器。
断点数
在内核模式下,最多可以使用 32 个软件断点。 在用户模式下,可以使用任意数量的软件断点。
支持的处理器断点数取决于目标处理器体系结构。
条件断点
可以设置仅在特定条件下触发的断点。 有关这些类型的断点的详细信息,请参阅 设置条件断点。
不明确的断点
在调试器引擎的版本 10.0.25310.1001 及更高版本中,现在支持不明确的断点解析。 模糊断点允许调试器在某些情况下设置断点,这些情况下断点表达式会解析到多个位置。 有关详细信息,请参阅 不明确的断点解析。