Control de la ejecución

El motor de depuración (DE) normalmente envía uno de los siguientes eventos como último evento de inicio:

  • Evento de punto de entrada, si se adjunta a un programa recién iniciado

  • Evento de carga completa, si se adjunta a un programa que ya se está ejecutando

    Ambos eventos están deteniendo eventos, lo que significa que el DE espera una respuesta del usuario mediante el IDE. Para obtener más información, consulte Modos operativos.

Evento de detención

Cuando se envía un evento de detención a la sesión de depuración:

  1. El programa y el subproceso que contienen el puntero de instrucción actual se pueden obtener de la interfaz de evento.

  2. El IDE determina el archivo de código fuente y la posición actuales, que se muestra como resaltado en el editor.

  3. La sesión de depuración suele responder a este primer evento de detención llamando al método Continue del programa.

  4. A continuación, el programa se ejecuta hasta que encuentra una condición de detención, como alcanzar un punto de interrupción. En ese caso, el DE envía un evento de punto de interrupción a la sesión de depuración. El evento de punto de interrupción es un evento de detención y de nuevo espera una respuesta del usuario.

  5. Si el usuario opta por entrar, sobre o salir de una función, el IDE solicita a la sesión de depuración que llame al método del Step programa. A continuación, el IDE pasa la unidad de paso (instrucción, instrucción o línea) y el tipo de paso (independientemente de si se va a entrar, sobre o salir de la función). Una vez completado el paso, el DE envía un evento de paso completo a la sesión de depuración, que es un evento de detención.

    o bien

    Si el usuario decide continuar ejecutándose desde el puntero de instrucción actual, el IDE solicita la sesión de depuración para llamar al método Execute del programa. El programa reanuda la ejecución hasta que encuentre la siguiente condición de detención.

    o bien

    Si la sesión de depuración es omitir un evento de detención determinado, la sesión de depuración llama al método Continue del programa. Si el programa entraba paso a paso, supera o sale de una función cuando encontró la condición de detención, continúa el paso.

    Mediante programación, cuando el DE encuentra una condición de detención, envía eventos de detención como IDebugLoadCompleteEvent2 o IDebugEntryPointEvent2 al administrador de depuración de sesión (SDM) mediante una interfaz IDebugEventCallback2. De pasa las interfaces IDebugProgram2 e IDebugThread2 que representan el programa y el subproceso que contiene el puntero de instrucción actual. El SDM llama a IDebugThread2::EnumFrameInfo para obtener el marco de pila superior y llama a IDebugStackFrame2::GetDocumentContext para obtener el contexto del documento asociado al puntero de instrucción actual. Este contexto de documento suele ser un nombre de archivo de código fuente, una línea y un número de columna. El IDE los usa para resaltar el código fuente que contiene el puntero de instrucción actual.

    El SDM suele responder a este primer evento de detención llamando a IDebugProgram2::Continue. A continuación, el programa se ejecuta hasta que encuentra una condición de detención, como alcanzar un punto de interrupción, en cuyo caso el DE envía una interfaz IDebugBreakpointEvent2 al SDM. El evento de punto de interrupción es un evento de detención y de nuevo espera una respuesta del usuario.

    Si el usuario decide pasar a paso a paso por instrucciones, o salir de una función, el IDE solicita al SDM que llame a IDebugProgram2::Step. A continuación, el IDE pasa STEPUNIT (instrucción, instrucción o línea) y STEPKIND, es decir, si se va a entrar, sobre o fuera de la función. Una vez completado el paso, el DE envía una interfaz IDebugStepCompleteEvent2 al SDM, que es un evento de detención.

    Si el usuario decide seguir ejecutándose desde el puntero de instrucción actual, el IDE pide al SDM que llame a IDebugProgram2::Execute. El programa reanuda la ejecución hasta que encuentre la siguiente condición de detención.

    Si el paquete de depuración es omitir un evento de detención determinado, el paquete de depuración llama al SDM, que llama a IDebugProgram2::Continue. Si el programa entraba paso a paso, supera o sale de una función cuando encontró la condición de detención, continúa el paso. Esto implica que el programa mantiene un estado paso a paso, de modo que sepa cómo continuar.

    Las llamadas que realiza el SDM a Step, Execute y Continue son asincrónicas, lo que significa que SDM espera que la llamada se devuelva rápidamente. Si el DE envía al SDM un evento de detención en el mismo subproceso antes Stepde , Ejecutar o Continuar devuelve, el SDM deja de responder.