Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 conecta a un programa que acaba de iniciarse
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 parada
Cuando se envía un evento de parada a la sesión de depuración:
El programa y el subproceso que contienen el puntero de instrucción actual se pueden obtener de la interfaz de eventos.
El IDE determina el archivo de código fuente y la posición actuales, que se muestra como resaltado en el editor.
La sesión de depuración suele responder a este primer evento de detención llamando al método Continue del programa.
A continuación, el programa se ejecuta hasta que encuentra una condición de parada, 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 ruptura es un evento de detención, y el DE de nuevo espera una respuesta del usuario.
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
Stepprograma. A continuación, el IDE pasa la unidad de paso (instrucción, declaración o línea) y el tipo de paso (si se debe entrar, pasar por encima o salir de la función). Una vez completado el paso, el DE envía un evento de finalización de paso a la sesión de depuración, lo cual es un evento de interrupción.O bien:
Si el usuario decide continuar ejecutando desde el puntero de instrucción actual, el IDE solicita a la sesión de depuración que llame al método Execute del programa. El programa reanuda la ejecución hasta que encuentre la siguiente condición de parada.
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 estaba entrando, pasando por encima o saliendo de una función cuando encontró la condición de detención, entonces prosigue con 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 . El DE pasa las interfaces IDebugProgram2 y 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 típicamente responde a este primer evento de detención invocando 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 detiene el proceso, y el DE vuelve a esperar una respuesta del usuario.
Si el usuario decide entrar, pasar por encima 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, declaración o línea) y STEPKIND, es decir, si se va a entrar, saltar o salir de la función. Una vez que se complete el paso, el DE envía al SDM una interfaz IDebugStepCompleteEvent2, 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 parada.
Si el paquete de depuración debe omitir un evento de parada determinado, el paquete de depuración llama al SDM, que a su vez llama a IDebugProgram2::Continue. Si el programa se introducía paso a paso, pasa por encima de, o sale de una función cuando encontraba la condición de parada, continúa con 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 de queStep, Ejecutar o Continuar devuelvan, el SDM deja de responder.