如果为尚未加载的例程名称设置 断点 ,则断点称为 延迟、 虚拟或 未解析 的断点。 (这些术语可互换使用。未解析的断点与模块的任何特定负载无关。 每次加载新应用程序时,都会检查此例程名称。 如果出现此例程,调试器将计算虚拟断点的实际编码地址并启用断点。
如果使用 bu 命令设置断点,则断点会自动被视为未解析。 如果此断点位于已加载的模块中,则断点仍处于启用状态并正常运行。 但是,如果模块稍后卸载并重新加载,则此断点不会消失。 另一方面,使用 bp 设置的断点将立即解析为地址。
bp 断点和 bu 断点之间存在三个主要差异:
bp 断点位置始终转换为地址。 如果模块更改导致设置了 bp 断点的代码位置移动,断点将仍然保持在相同的地址。 另一方面, bu 断点仍与使用的符号值(通常是符号加偏移量)相关联,即使符号的地址发生更改,也会跟踪此符号位置。
如果在加载的模块中找到 bp 断点地址,并且该模块稍后卸载,则会从断点列表中删除断点。 另一方面, bu 断点在重复卸载和加载后仍然存在。
使用 bp 设置的断点不会保存在 WinDbg 工作区中。 使用 bu 设置的断点保存在工作区中。
控制地址断点和未解析断点
可以使用 bp(设置断点)命令创建地址断点,或者在包含 /d 开关时使用 bm(设置符号断点)命令创建地址断点。 可以使用 bu (Set Unresolved Breakpoint) 命令创建未解析断点,或者在不包含 /d 开关时使用 bm 命令创建未解析断点。 禁用、启用和修改断点的命令适用于所有类型的断点。 显示断点列表的命令包括所有断点,并指示每个断点的类型。 有关这些命令的列表,请参阅 控制断点的方法。
“WinDbg 断点 ”对话框显示所有断点,指示未解析的断点和表示法为“u”。 此对话框可用于修改任何断点。 此对话框中的 “命令 ”文本框可用于创建任何类型的断点;如果省略类型,则会创建未解析的断点。 有关详细信息,请参阅 编辑 | 断点。 在 WinDbg 反汇编窗口 或 源窗口中使用鼠标设置断点时,调试器将创建未解析的断点。