Adjuntar al programa
Después de registrar los programas con el puerto adecuado, debe adjuntar el depurador al programa que desea depurar.
Elección de cómo adjuntar
Hay tres maneras en las que el administrador de depuración de sesión (SDM) intenta asociarse al programa que se está depurando.
Para los programas que inicia el motor de depuración a través del método LaunchSuspended (típico de los lenguajes interpretados, por ejemplo), el SDM obtiene la interfaz IDebugProgramNodeAttach2 del objeto IDebugProgramNode2 asociado al programa al que se adjunta. Si el SDM puede obtener la
IDebugProgramNodeAttach2
interfaz, el SDM llama al método OnAttach . ElIDebugProgramNodeAttach2::OnAttach
método devuelveS_OK
para indicar que no se adjuntó al programa y que se pueden realizar otros intentos para adjuntarlo al programa.Si el SDM puede obtener la interfaz IDebugProgramEx2 del programa al que se está adjuntando, el SDM llama al método Attach . Este enfoque es típico para los programas que el proveedor de puertos inició de forma remota.
Si el programa no se puede adjuntar a través de los
IDebugProgramNodeAttach2::OnAttach
métodos oIDebugProgramEx2::Attach
, sdM carga el motor de depuración (si aún no está cargado) llamando a laCoCreateInstance
función y, a continuación, llama al método Attach . Este enfoque es típico para los programas lanzados localmente por un proveedor de puertos.También es posible que un proveedor de puertos personalizado llame al
IDebugEngine2::Attach
método en la implementación del proveedor de puertos personalizado delIDebugProgramEx2::Attach
método . Normalmente, en este caso, el proveedor de puertos personalizado inicia el motor de depuración en la máquina remota.Los datos adjuntos se logran cuando el administrador de depuración de sesión (SDM) llama al método Attach .
Si ejecuta el DE en el mismo proceso que la aplicación que se va a depurar, debe implementar los métodos siguientes de IDebugProgramNode2:
-
Después de llamar al
IDebugEngine2::Attach
método , siga estos pasos en la implementación delIDebugEngine2::Attach
método :
Envíe un objeto de evento IDebugEngineCreateEvent2 al SDM. Para obtener más información, consulte Envío de eventos.
Llame al método GetProgramId en el objeto IDebugProgram2 que se pasó al
IDebugEngine2::Attach
método .Esto devuelve un
GUID
que se usa para identificar el programa.GUID
Debe almacenarse en el objeto que representa el programa local al DE y debe devolverse cuando se llama alIDebugProgram2::GetProgramId
método en laIDebugProgram2
interfaz.Nota:
Si implementa la
IDebugProgramNodeAttach2
interfaz , el programaGUID
se pasa alIDebugProgramNodeAttach2::OnAttach
método . EstoGUID
se usa para el programaGUID
devuelto por elIDebugProgram2::GetProgramId
método .Envíe un objeto de evento IDebugProgramCreateEvent2 para notificar al SDM que el objeto local
IDebugProgram2
se creó para representar el programa en el DE. Para obtener más información, consulte Envío de eventos.Nota:
Este no es el mismo
IDebugProgram2
objeto que se pasó alIDebugEngine2::Attach
método . El objeto pasadoIDebugProgram2
anteriormente solo lo reconoce el puerto y es un objeto independiente.