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

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

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

bp 断点和 bu 断点之间有三个主要区别:

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

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

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

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

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

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