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_OK
o 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.