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.

  1. 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 . El IDebugProgramNodeAttach2::OnAttach método devuelve S_OK para indicar que no se adjuntó al programa y que se pueden realizar otros intentos para adjuntarlo al programa.

  2. 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.

  3. Si el programa no se puede adjuntar a través de los IDebugProgramNodeAttach2::OnAttach métodos o IDebugProgramEx2::Attach , sdM carga el motor de depuración (si aún no está cargado) llamando a la CoCreateInstance 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 del IDebugProgramEx2::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:

  1. Envíe un objeto de evento IDebugEngineCreateEvent2 al SDM. Para obtener más información, consulte Envío de eventos.

  2. 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 al IDebugProgram2::GetProgramId método en la IDebugProgram2 interfaz.

    Nota:

    Si implementa la IDebugProgramNodeAttach2 interfaz , el programa GUID se pasa al IDebugProgramNodeAttach2::OnAttach método . Esto GUID se usa para el programa GUID devuelto por el IDebugProgram2::GetProgramId método .

  3. 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ó al IDebugEngine2::Attach método . El objeto pasado IDebugProgram2 anteriormente solo lo reconoce el puerto y es un objeto independiente.