Compartir a través de


Adjuntar después de un lanzamiento

Una vez que se inicia un programa, la sesión de depuración está lista para adjuntar el motor de depuración (DE) al programa indicado.

Decisiones de diseño

Dado que la comunicación es más fácil dentro de un espacio de direcciones compartido, debe elegir entre dos enfoques de diseño: establecer la comunicación entre la sesión de depuración y el DE. O bien, establezca la comunicación entre el DE y el programa. Elija entre lo siguiente:

  • Si tiene más sentido configurar la comunicación entre la sesión de depuración y el DE, la sesión de depuración crea conjuntamente el DE y pide al DE que se adjunte al programa. Este diseño deja la sesión de depuración y DE juntas en un espacio de direcciones, y el entorno de ejecución y el programa juntos en otro.

  • Si tiene más sentido configurar la comunicación entre el DE y el programa, el entorno en tiempo de ejecución co-crea el DE. Este diseño deja al SDM en un espacio de direcciones y coloca el DE, el entorno de ejecución y el programa juntos en otro. Este diseño es típico de un entorno de desarrollo (ED) que se implementa con un intérprete para ejecutar lenguajes de scripting.

    Nota:

    El modo en que el DE se adjunta al programa depende de la implementación. La comunicación entre el DE y el programa también depende de la implementación.

Implementation

Mediante programación, cuando el administrador de depuración de sesión (SDM) recibe primero el objeto IDebugProgram2 que representa el programa que se va a iniciar, llama al método Attach y le pasa un objeto IDebugEventCallback2 , que se usa más adelante para pasar eventos de depuración de nuevo al SDM. A continuación, el IDebugProgram2::Attach método llama al método OnAttach . Para obtener más información sobre cómo el SDM recibe la IDebugProgram2 interfaz, consulte Notificación del puerto.

Si el DE necesita ejecutarse en el mismo espacio de direcciones que el programa que está depurando, es porque el DE suele formar parte de un intérprete que ejecuta un script. El IDebugProgramNodeAttach2::OnAttach método devuelve S_FALSE. El S_FALSE retorno indica que completó el proceso de asociación.

Sin embargo, si el DE se ejecuta en el espacio de direcciones del SDM, el IDebugProgramNodeAttach2::OnAttach método devuelve S_OK, o la interfaz IDebugProgramNodeAttach2 no se implementa de ninguna manera en el objeto IDebugProgramNode2 asociado al programa que está depurando. En este caso, finalmente se llama al método Attach para completar la operación de asociación.

En este último caso, debe llamar al método GetProgramId en el objeto IDebugProgram2 que se pasó al método IDebugEngine2::Attach, almacenar el GUID en el objeto de programa local y devolver este GUID cuando posteriormente se llame al método IDebugProgram2::GetProgramId en este objeto. Se usa el GUID para identificar de manera única el programa en los distintos componentes de depuración.

En el caso del método IDebugProgramNodeAttach2::OnAttach retornando S_FALSE, el objeto GUID que se va a usar para el programa se pasa a ese método y es el método IDebugProgramNodeAttach2::OnAttach el que establece el GUID en el objeto del programa local.

El DE ahora está asociado al programa y está listo para enviar cualquier evento de inicio.