调试引擎 (DE) 必须支持断点设置。 Visual Studio 调试支持以下类型的断点:
绑定
通过 UI 请求并成功绑定到指定的代码位置
Pending
通过用户界面请求,但尚未绑定到具体操作指令
讨论
例如,当指令尚未加载时,将发生挂起的断点。 加载代码时,挂起的断点会尝试绑定到指定位置的代码,即在代码中插入中断指令。 事件将发送到会话调试管理器(SDM),以指示成功绑定或通知存在绑定错误。
挂起的断点还管理其自己的内部绑定断点列表。 一个挂起的断点可能会导致在代码中插入许多断点。 Visual Studio 调试 UI 显示挂起断点及其相应绑定断点的树视图。
创建和使用挂起断点需要实现IDebugEngine2::CreatePendingBreakpoint 方法以及 IDebugPendingBreakpoint2 接口中的以下方法。
| 方法 | Description |
|---|---|
| CanBind | 确定指定的挂起断点是否可以绑定到代码位置。 |
| 绑定 | 将指定的挂起断点绑定到一个或多个代码位置。 |
| GetState | 获取挂起断点的状态。 |
| GetBreakpointRequest | 获取用于创建未决断点的断点请求。 |
| 启用 | 切换挂起断点的启用状态。 |
| EnumBoundBreakpoints | 枚举从待决断点绑定的所有断点。 |
| EnumErrorBreakpoints | 枚举挂起断点导致的所有错误断点。 |
| 删除 | 删除挂起的断点及其绑定的所有断点。 |
若要枚举绑定断点和错误断点,必须实现 IEnumDebugBoundBreakpoints2 和 IEnumDebugErrorBreakpoints2 的所有方法。
绑定到代码位置的挂起断点需要实现以下 IDebugBoundBreakpoint2 方法。
| 方法 | Description |
|---|---|
| GetPendingBreakpoint | 获取一个包含指定断点的待处理断点。 |
| GetState | 获取绑定断点的状态。 |
| GetBreakpointResolution | 获取描述断点的断点解析。 |
| 启用 | 启用或禁用断点。 |
| 删除 | 删除绑定断点。 |
解决方法和请求信息需要实现以下 IDebugBreakpointResolution2 方法。
| 方法 | Description |
|---|---|
| GetBreakpointType | 获取由分辨率表示的断点类型。 |
| GetResolutionInfo | 获取描述断点的断点解析信息。 |
解决绑定期间可能发生的错误需要实现以下 IDebugErrorBreakpoint2 方法。
| 方法 | Description |
|---|---|
| GetPendingBreakpoint | 获取包含错误断点的挂起断点。 |
| GetBreakpointResolution | 获取描述错误断点的断点错误解决方法。 |
解决绑定期间可能发生的错误还需要以下 IDebugErrorBreakpointResolution2 方法。
| 方法 | Description |
|---|---|
| GetBreakpointType | 获取断点的类型。 |
| GetResolutionInfo | 获取断点的解析信息。 |
在断点查看源代码需要实现 IDebugStackFrame2::GetDocumentContext 和/或 IDebugStackFrame2::GetCodeContext 的方法。