Compartir a través de


Interacción con el motor

Comandos y expresiones

La API del motor de depurador proporciona métodos para ejecutar comandos y evaluar expresiones, como las que se escriben en la ventana de comandos del depurador de WinDbg. Para ejecutar un comando del depurador, use Execute. O bien, para ejecutar todos los comandos de un archivo, use ExecuteCommandFile.

El método Evaluate evaluará las expresiones mediante la sintaxis de C++ o MASM. La sintaxis usada por el motor del depurador para evaluar expresiones,como en el método Evaluate , se da mediante GetExpressionSyntax y se puede cambiar mediante SetExpressionSyntaxByName y SetExpressionSyntax. GetNumberExpressionSyntaxNames devuelve el número de sintaxis diferentes reconocidas por el depurador, y GetExpressionSyntaxNames devuelve sus nombres.

El tipo de valor devuelto por Evaluate viene determinado por los símbolos y constantes usados en la cadena evaluada. El valor se encuentra en una estructura de DEBUG_VALUE y se puede convertir a diferentes tipos mediante CoerceValue y CoerceValues.

Alias

Los alias son cadenas de caracteres que se reemplazan automáticamente por otras cadenas de caracteres cuando se usan en comandos y expresiones del depurador. Para obtener información general sobre los alias, consulte Uso de alias. El motor del depurador tiene varias clases de alias.

Los alias de nombre fijo se indexan por número y tienen los nombres $u 0, $u 1, ..., $u 9. Los valores de estos alias se pueden establecer mediante el método SetTextMacro y se pueden recuperar mediante el método GetTextMacro .

Los alias automáticos y los alias con nombre de usuario pueden tener cualquier nombre. Los alias automáticos se definen mediante el motor del depurador y los alias con nombre de usuario los define el usuario a través de comandos del depurador o la API del motor de depurador. Para definir o quitar un alias con nombre de usuario, use el método SetTextReplacement . El método GetTextReplacement devuelve el nombre y el valor de un alias automático o un alias con nombre de usuario. Todos los alias con nombre de usuario se pueden quitar mediante el método RemoveTextReplacements . El método GetNumberTextReplacements devolverá el número de nombres de usuario y alias automáticos; se puede usar con GetTextReplacement para iterar todos estos alias. El método OutputTextReplacements imprimirá una lista de todos los alias con nombre de usuario, incluidos sus nombres y valores.

Tenga en cuenta que si un alias con nombre de usuario tiene el mismo nombre que un alias automático, el alias con nombre del usuario ocultará el alias automático para que, al recuperar el valor del alias por nombre, se usará el alias con nombre del usuario.

>Opciones del motor

El motor tiene varias opciones que controlan su comportamiento. Estas opciones se muestran en DEBUG_ENGOPT_XXX. Los devuelve GetEngineOptions y se pueden establecer mediante SetEngineOptions. Las opciones individuales se pueden establecer mediante AddEngineOptions y anular el conjunto mediante RemoveEngineOptions.

Interrupciones

Una interrupción es una manera de forzar una interrupción en el depurador o indicar al motor que detenga el procesamiento del comando actual, por ejemplo, presionando Ctrl+Interrumpir en WinDbg.

Para solicitar una interrupción en el depurador o interrumpir la tarea actual del depurador, use SetInterrupt. Para comprobar si se ha producido una interrupción, use GetInterrupt.

Nota Al realizar una tarea larga desde una extensión del depurador, se recomienda que la extensión compruebe GetInterrupt con regularidad y detenga el procesamiento si se ha solicitado una interrupción.

Al solicitar una interrupción en el depurador, el motor podría agotar el tiempo de espera si el destino tarda demasiado tiempo en llevar a cabo la interrupción. Esto puede ocurrir si el destino está en un estado que no responde o si la solicitud de interrupción está bloqueada o retrasada por la contención de recursos. GetInterruptTimeout devuelve el período de tiempo que el motor esperará y se puede establecer mediante SetInterruptTimeout.