Compartir a través de


Depuración del modelo de sesión y ejecución

El motor del depurador puede depurar varios destinos simultáneamente. Una sesión de depuración comienza cuando el motor adquiere un destino y continúa hasta que se han descartado todos los destinos. No se puede acceder a una sesión de depuración mientras los destinos se ejecutan y son accesibles cuando se suspende el destino actual. El motor solo se puede usar para examinar y manipular destinos mientras se puede acceder a la sesión.

El bucle principal de un depurador normalmente consta de establecer el estado de ejecución, llamando al método WaitForEvent y controlando los eventos generados. Cuando se llama a WaitForEvent , la sesión deja de estar accesible.

Cuando se produce un evento en un destino, el motor suspende todos los destinos y se puede acceder a la sesión. A continuación, el motor notifica las devoluciones de llamada de eventos del evento y sigue las reglas de filtro de eventos. Las devoluciones de llamada de eventos y los filtros de eventos determinan cómo debe continuar la ejecución en el destino. Si determinan que el motor debe dividirse en el depurador, el método WaitForEvent devuelve y la sesión permanece accesible; de lo contrario, el motor reanudará la ejecución del destino de la manera determinada por las devoluciones de llamada de eventos y los filtros de eventos, y la sesión vuelve a ser inaccesible.

Durante la llamada WaitForEvent , en particular, al notificar las devoluciones de llamada de eventos y el procesamiento de las reglas de filtro, el motor se encuentra en un estado denominado "dentro de una espera". Mientras está en este estado, no se puede llamar a WaitForEvent (no es reentrant).

Hay dos pasos implicados en iniciar la ejecución en un destino: establecer el estado de ejecución y, a continuación, llamar a WaitForEvent. El estado de ejecución se puede establecer mediante el método SetExecutionStatus o ejecutando un comando del depurador que establece el estado de ejecución; por ejemplo, g(Go) y p (Paso).

Si una secuencia de comandos del depurador se ejecuta conjuntamente, por ejemplo, "g ; ? @$ip"--- Se producirá una espera implícita después de cualquier comando que requiera la ejecución en el destino si ese comando no es el último comando de la secuencia. No se puede producir una espera implícita cuando el motor del depurador está en el estado "dentro de una espera"; en este caso, la ejecución de los comandos se detendrá y el comando actual(el que intentó provocar la espera implícita), se interpretará como una indicación de cómo debe continuar la ejecución en el destino. El resto de los comandos se descartarán.

Nota Al determinar si la sesión es accesible o no es accesible, el motor considera la ejecución limitada de un destino (por ejemplo, la ejecución paso a paso). Una vez completada la ejecución limitada, se puede acceder a la sesión.

Motor de host

Al depurar de forma remota, puede usar varias instancias del motor del depurador. Exactamente una de estas instancias mantiene la sesión de depuración; esta instancia se denomina motor de host.

Todas las operaciones del depurador son relativas al motor host, por ejemplo, la carga de símbolos y la carga de extensiones.