Compartir a través de


Ejecutar hasta que se alcanza un estado especificado

Hay varias maneras de hacer que el destino se ejecute hasta que se alcance un estado especificado.

Uso de un punto de interrupción para controlar la ejecución

Un método consiste en usar un punto de interrupción. El punto de interrupción más sencillo detiene la ejecución cuando el contador del programa alcanza una dirección especificada. Un punto de interrupción más complejo puede:

  • se desencadena solo cuando un subproceso específico ejecuta esta dirección,

  • permitir un número especificado de pasos a través de esta dirección antes de desencadenarse,

  • emita automáticamente un comando especificado cuando se desencadene o

  • watch una dirección especificada en memoria no ejecutable, que se desencadena cuando esa memoria se lee o escribe en.

Para obtener más información sobre cómo establecer y controlar puntos de interrupción, vea Uso de puntos de interrupción.

Una manera más complicada de ejecutarse hasta que se alcanza un estado especificado es usar un punto de interrupción condicional. Este tipo de punto de interrupción se establece en una dirección determinada, pero solo se desencadena si una condición especificada contiene. Para obtener más información, consulte Establecimiento de un punto de interrupción condicional.

Puntos de interrupción y Pseudo-Registers

Al especificar el estado deseado, a menudo resulta útil usar pseudo-registros automáticos. Estas son variables controladas por el depurador que permiten hacer referencia a una variedad de valores relacionados con el estado de destino.

Por ejemplo, el siguiente punto de interrupción usa el $thread pseudo-register, que siempre es igual al valor del subproceso actual. Se resuelve en el valor del subproceso actual cuando se usa en un comando. Mediante el uso de $thread como argumento del parámetro /t del comando bp (Establecer punto de interrupción), puede crear un punto de interrupción que se desencadenará cada vez que el subproceso NtOpenFile sea llamado por el subproceso que estaba activo en el momento en que emitió el comando bp :

kd> bp /t @$thread nt!ntopenfile

Este punto de interrupción no se desencadenará cuando cualquier otro subproceso llame a NtOpenFile.

Para obtener una lista de pseudo-registros automáticos, consulte Pseudo-Register Syntax.

Usar un archivo de script para controlar la ejecución

Otra manera de ejecutarse hasta que se alcanza un estado especificado es crear un archivo de script que se llame de forma recursiva, probando el estado deseado en cada iteración.

Normalmente, este archivo de script contendrá los tokens .if y .else . Puede usar un comando como t (Trace) para ejecutar un solo paso y, a continuación, probar la condición en cuestión.

Por ejemplo, si desea ejecutar hasta que el registro de eax contenga el valor 0x1234, puede crear un archivo de script denominado eaxstep que contenga la siguiente línea:

.if (@eax == 1234) { .echo 1234 } .else { t "$<eaxstep" }

A continuación, emita el siguiente comando desde la ventana Comando del depurador:

t "$<eaxstep"

Este comando t ejecutará un único paso y, a continuación, ejecutará el comando entre comillas. Este comando suele ser $< (Ejecutar archivo de script), que ejecuta el archivo eaxstep . El archivo de script prueba el valor de eax, ejecuta el comando t y, a continuación, se llama a sí mismo de forma recursiva. Esto continúa hasta que el registro de eax es igual a 0x1234, momento en el que el comando .echo (Echo Comment) imprime un mensaje en la ventana Comando del depurador y la ejecución se detiene.

Para obtener más información sobre los archivos de script, vea Usar archivos de script y Usar programas de comandos del depurador.

Resolución ambigua del punto de interrupción

En la versión 10.0.25310.1001 y posteriores del motor del depurador, ahora se admite la resolución ambigua del punto de interrupción. Los puntos de interrupción ambiguos permiten al depurador establecer puntos de interrupción en determinados escenarios en los que una expresión de punto de interrupción se resuelve en varias ubicaciones. Para obtener más información, vea Resolución ambigua de puntos de interrupción.

Vea también

Usar puntos de interrupción

Sintaxis de punto de interrupción

bp, bu, bm (Establecer punto de interrupción)

Resolución ambigua del punto de interrupción

Puntos de interrupción sin resolver (bu Puntos de interrupción)