无法解析的断点(bu 断点)

如果为未加载的例程名称设置了断点,则该断点称为延迟虚拟未解析断点。 (这些术语可以互换使用。)未解析的断点与模块的任何特定加载无关。 每次加载新程序时,都会检查该例程名称。 如果出现此例程,调试器就会计算虚拟断点的实际编码地址,同时启用断点。

如果使用 bu 命令设置断点,则该断点将自动被视为未解析。 如果此断点位于已加载的模块中,则该断点仍会启用并正常运行。 但是,如果随后卸载并重新加载模块,则此断点不会消失。 另一方面,使用 bp 设置的断点会被立即解析为一个地址。

bp 断点和 bu 断点之间存在三个主要差异:

  • bp 断点位置始终转换为地址。 如果模块更改移动了设置 bp 断点的代码,断点仍会保留在相同地址。 另一方面,bu 断点仍与使用的符号值(通常是符号加偏移量)相关联,即使符号的地址发生更改,也会跟踪此符号位置。

  • 如果在加载的模块中找到 bp 断点地址,并且该模块稍后卸载,则会从断点列表中删除断点。 另一方面,bu 断点在重复卸载和加载后仍然存在。

  • 使用 bp 设置的断点不会保存在 WinDbg 工作区中。 使用 bu 设置的断点保存在工作区中。

控制地址断点和未解析断点

可以使用 bp(设置断点)命令或 bm(设置符号断点) 命令(如果包含 /d 开关)来创建地址断点。 可以使用 bu(设置未解析断点)命令或 bm 命令(如果不包含 /d 开关)来创建未解析断点。 禁用、启用和修改断点的命令适用于所有类型的断点。 显示断点列表的命令包括所有断点,并指示每个断点的类型。 有关这些命令的列表,请参阅控制断点的方法

WinDbg 的“断点”对话框会显示所有断点,并用“u”表示未解析的断点。 此对话框可用于修改任何断点。 此对话框中的“命令”文本框可用于创建任何类型的断点;如果省略该类型,则会创建一个未解析的断点。 有关详细信息,请参阅编辑 | 断点。 在 WinDbg 的“反汇编窗口”或“源”窗口中使用鼠标设置断点时,调试器将创建一个未解析的断点。