附加到程序
适用范围:Visual Studio
Visual Studio for Mac
Visual Studio Code
使用相应的端口注册程序后,必须将调试器附加到要调试的程序。
选择附加方式
会话调试管理器可通过三种方式 (SDM) 尝试附加到正在调试的程序。
对于调试引擎通过 LaunchSuspended 方法启动的程序, (典型的解释语言(例如) ),SDM 从与所附加到的程序关联的 IDebugProgramNode2 对象获取 IDebugProgramNodeAttach2 接口。 如果 SDM 可以获取接口
IDebugProgramNodeAttach2
,则 SDM 会调用 OnAttach 方法。 方法IDebugProgramNodeAttach2::OnAttach
返回S_OK
以指示它未附加到程序,并且可以尝试附加到程序。如果 SDM 可以从要附加到的程序获取 IDebugProgramEx2 接口,则 SDM 将调用 Attach 方法。 此方法是端口供应商远程启动的程序的典型方法。
如果无法通过
IDebugProgramNodeAttach2::OnAttach
或IDebugProgramEx2::Attach
方法附加程序,则 SDM 通过调用CoCreateInstance
函数来加载调试引擎 ((如果尚未加载) ),然后调用 Attach 方法。 此方法是端口供应商在本地启动的程序的典型方法。自定义端口供应商还可以在自定义端口供应商对 方法的实现
IDebugProgramEx2::Attach
中调用IDebugEngine2::Attach
方法。 在这种情况下,自定义端口供应商通常会在远程计算机上启动调试引擎。当会话调试管理器 (SDM) 调用 Attach 方法时,可实现 附件 。
如果在与要调试的应用程序相同的进程中运行 DE,则必须实现 IDebugProgramNode2 的以下方法:
-
IDebugEngine2::Attach
调用 方法后,请在方法的IDebugEngine2::Attach
实现中执行以下步骤:
将 IDebugEngineCreateEvent2 事件对象发送到 SDM。 有关详细信息,请参阅 发送事件。
在传递给
IDebugEngine2::Attach
方法的 IDebugProgram2 对象上调用 GetProgramId 方法。这将返回
GUID
用于标识程序的 。GUID
必须存储在 对象中,该对象代表 DE 的本地程序,并且必须在接口上IDebugProgram2
调用 方法时IDebugProgram2::GetProgramId
返回它。注意
如果实现
IDebugProgramNodeAttach2
接口,则会将程序的GUID
传递给IDebugProgramNodeAttach2::OnAttach
方法。 这GUID
用于 方法返回IDebugProgram2::GetProgramId
的程序GUID
。发送 IDebugProgramCreateEvent2 事件对象,通知 SDM 已创建本地
IDebugProgram2
对象以向 DE 表示程序。 有关详细信息,请参阅 发送事件。注意
这与传递到
IDebugEngine2::Attach
方法中的对象不同IDebugProgram2
。 以前传递的对象IDebugProgram2
仅由端口识别,并且是一个单独的对象。