附加到程序

适用范围:yesVisual Studio noVisual Studio for Mac noVisual Studio Code

使用相应的端口注册程序后,必须将调试器附加到要调试的程序。

选择附加方式

会话调试管理器可通过三种方式 (SDM) 尝试附加到正在调试的程序。

  1. 对于调试引擎通过 LaunchSuspended 方法启动的程序, (典型的解释语言(例如) ),SDM 从与所附加到的程序关联的 IDebugProgramNode2 对象获取 IDebugProgramNodeAttach2 接口。 如果 SDM 可以获取接口 IDebugProgramNodeAttach2 ,则 SDM 会调用 OnAttach 方法。 方法 IDebugProgramNodeAttach2::OnAttach 返回 S_OK 以指示它未附加到程序,并且可以尝试附加到程序。

  2. 如果 SDM 可以从要附加到的程序获取 IDebugProgramEx2 接口,则 SDM 将调用 Attach 方法。 此方法是端口供应商远程启动的程序的典型方法。

  3. 如果无法通过 IDebugProgramNodeAttach2::OnAttachIDebugProgramEx2::Attach 方法附加程序,则 SDM 通过调用 CoCreateInstance 函数来加载调试引擎 ((如果尚未加载) ),然后调用 Attach 方法。 此方法是端口供应商在本地启动的程序的典型方法。

    自定义端口供应商还可以在自定义端口供应商对 方法的实现IDebugProgramEx2::Attach中调用 IDebugEngine2::Attach 方法。 在这种情况下,自定义端口供应商通常会在远程计算机上启动调试引擎。

    当会话调试管理器 (SDM) 调用 Attach 方法时,可实现 附件

    如果在与要调试的应用程序相同的进程中运行 DE,则必须实现 IDebugProgramNode2 的以下方法:

  1. IDebugEngineCreateEvent2 事件对象发送到 SDM。 有关详细信息,请参阅 发送事件

  2. 在传递给 IDebugEngine2::Attach 方法的 IDebugProgram2 对象上调用 GetProgramId 方法。

    这将返回 GUID 用于标识程序的 。 GUID必须存储在 对象中,该对象代表 DE 的本地程序,并且必须在接口上IDebugProgram2调用 方法时IDebugProgram2::GetProgramId返回它。

    注意

    如果实现 IDebugProgramNodeAttach2 接口,则会将程序的 GUID 传递给 IDebugProgramNodeAttach2::OnAttach 方法。 这GUID用于 方法返回IDebugProgram2::GetProgramId的程序GUID

  3. 发送 IDebugProgramCreateEvent2 事件对象,通知 SDM 已创建本地 IDebugProgram2 对象以向 DE 表示程序。 有关详细信息,请参阅 发送事件

    注意

    这与传递到 IDebugEngine2::Attach 方法中的对象不同IDebugProgram2。 以前传递的对象 IDebugProgram2 仅由端口识别,并且是一个单独的对象。

请参阅