Share via


Evaluación de expresiones

El depurador entiende dos formas diferentes de expresiones: expresiones MASM y expresiones de C++.

Las expresiones de Ensamblador de macros de Microsoft (MASM) se usan en los ejemplos de esta documentación de Ayuda, excepto cuando se indique lo contrario. En las expresiones MASM, todos los símbolos se tratan como direcciones.

Las expresiones de C++ son las mismas que las usadas en el código de C++ real. En estas expresiones, los símbolos se comprenden como los tipos de datos adecuados.

Cuando se usa cada sintaxis

Puede seleccionar el evaluador de expresiones predeterminado de una de las maneras siguientes:

Si no usa uno de los métodos anteriores, el depurador usa el evaluador de expresiones MASM.

Si desea evaluar una expresión sin cambiar el estado del depurador, puede usar ? (Evaluar expresión) Comando.

Todos los comandos y ventanas de información de depuración interpretan sus argumentos a través del evaluador de expresiones predeterminado, con las excepciones siguientes:

  • ¿La ?? (Evaluar expresión de C++) el comando siempre usa el evaluador de expresiones de C++.

  • La ventana Inspección siempre usa el evaluador de expresiones de C++.

  • La ventana Variables locales siempre usa el evaluador de expresiones de C++.

  • Algunos comandos de extensión siempre usan el evaluador de expresiones MASM (y otros comandos de extensión solo aceptan argumentos numéricos en lugar de expresiones completas).

  • Si alguna parte de una expresión se incluye entre paréntesis e inserta dos en signos (@@) antes de la expresión, el evaluador de expresiones que normalmente no se usaría en este caso.

Los dos signos (@@) permiten usar dos evaluadores diferentes para parámetros diferentes de un solo comando. También permite evaluar diferentes partes de una expresión larga por métodos diferentes. Puede anidar los dos en signos. Cada aspecto de los dos en signos cambia al otro evaluador de expresiones.

Advertencia La sintaxis de expresión de C++ es útil para manipular estructuras y variables, pero no es adecuado como analizador para los parámetros de los comandos del depurador. Cuando use comandos del depurador para fines generales o use extensiones del depurador, debe establecer la sintaxis de expresión MASM como evaluador de expresiones predeterminado. Si debe tener un parámetro específico, use la sintaxis de expresión de C++, use la sintaxis de dos en signo (@@).

Para obtener más información sobre los dos tipos de expresión diferentes, vea Sintaxis de expresión numérica.

Números en expresiones

Los números de expresiones MASM se interpretan según el radix actual. El comando n (Set Number Base) se puede usar para establecer el radix predeterminado en 16, 10 o 8. Todos los números sin prefijo se interpretarán en esta base. El radix predeterminado se puede invalidar especificando el prefijo 0x (hexadecimal), el prefijo 0n (decimal), el prefijo 0t (octal) o el prefijo 0y (binario).

Los números de expresiones de C++ se interpretan como números decimales a menos que especifique de forma diferente. Para especificar un entero hexadecimal, agregue 0x antes del número. Para especificar un entero octal, agregue 0 (cero) antes del número. (Sin embargo, en la salida del depurador, a veces se usa el prefijo decimal 0n ).

Si desea mostrar un número en varias bases al mismo tiempo, use el comando .formats (Mostrar formatos de número).

Símbolos en expresiones

Los dos tipos de expresiones interpretan los símbolos de forma diferente:

  • En las expresiones MASM, cada símbolo se interpreta como una dirección. Dependiendo de lo que hace referencia el símbolo, esta dirección es la dirección de una variable global, variable local, función, segmento, módulo o cualquier otra etiqueta reconocida.

  • En las expresiones de C++, cada símbolo se interpreta según su tipo. Dependiendo de lo que hace referencia el símbolo, puede interpretarse como un entero, una estructura de datos, un puntero de función o cualquier otro tipo de datos. Un símbolo que no se corresponde con un tipo de datos de C++ (por ejemplo, un nombre de módulo sin modificar) crea un error de sintaxis.

Si un símbolo puede ser ambiguo, precedítelo con el nombre del módulo y un signo de exclamación ( ! ). Si el nombre del símbolo se puede interpretar como un número hexadecimal, precedítelo con el nombre del módulo y un signo de exclamación ( ! ) o solo un signo de exclamación. Para especificar que un símbolo está pensado para ser local, omita el nombre del módulo e incluya un signo de dólar y un signo de exclamación ( $! ) antes del nombre del símbolo. Para obtener más información sobre cómo interpretar símbolos, vea Sintaxis de símbolos y Coincidencia de símbolos.

Operadores en expresiones

Cada tipo de expresión usa una colección diferente de operadores.

Para obtener más información sobre los operadores que puede usar en expresiones MASM y sus reglas de precedencia, vea Números y operadores de MASM.

Para obtener más información sobre los operadores que puede usar en expresiones de C++ y sus reglas de precedencia, vea Números y operadores de C++.

Recuerde que las operaciones de MASM siempre están basadas en bytes y que las operaciones de C++ siguen las reglas de tipo de C++ (incluido el escalado de la aritmética de puntero).

Para obtener algunos ejemplos de las diferentes sintaxis, vea Ejemplos de expresiones mixtas.