Compartir a través de


Adjuntar después de un inicio

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 y el programa en tiempo de ejecución 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 crea el DE. Este diseño deja el SDM en un espacio de direcciones y el DE, el entorno en tiempo de ejecución y el programa juntos en otro. Este diseño es típico de un DE que se implementa con un intérprete para ejecutar lenguajes con scripts.

    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.

Implementación

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: porque el DE suele formar parte de un intérprete que ejecuta un script, el IDebugProgramNodeAttach2::OnAttach método devuelve S_FALSE. La S_FALSE devolución indica que completó el proceso de asociación.

Sin embargo, si el DE se ejecuta en el espacio de direcciones del SDM: el método devuelve S_OKo la interfaz IDebugProgramNodeAttach2 no se implementa en absoluto en el objeto IDebugProgramNode2 asociado al programa que está depurando.IDebugProgramNodeAttach2::OnAttach 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 IDebugProgram2 objeto que se pasó al IDebugEngine2::Attach método , almacenar el GUID en el objeto de programa local y devolverlo GUID cuando posteriormente se llama al IDebugProgram2::GetProgramId método en este objeto. GUID se usa para identificar el programa de forma única en los distintos componentes de depuración.

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

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