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.
Nota:
Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.
Al compilar código no administrado, puede configurar una imagen ejecutable para la depuración estableciendo modificadores ide o opciones de línea de comandos. Por ejemplo, puede usar la opción de línea de comandos /Zi en Visual C++ para pedirle que emita archivos de símbolos de depuración (extensión de archivo .pdb). Del mismo modo, la opción de línea de comandos /Od indica al compilador que deshabilite la optimización. El código resultante se ejecuta más lentamente, pero es más fácil depurar, si es necesario.
Al compilar código administrado de .NET Framework, los compiladores como Visual C++, Visual Basic y C# compilan su programa de origen en lenguaje intermedio común (CIL). CIL se compila DESPUÉS JIT, justo antes de la ejecución, en código de máquina nativo. Al igual que con el código no administrado, puede configurar una imagen ejecutable para la depuración estableciendo modificadores ide o opciones de línea de comandos. También puede configurar la compilación JIT para la depuración de la misma manera.
Esta configuración JIT tiene dos aspectos:
Puede solicitar al compilador JIT que genere información de seguimiento. Esto permite que el depurador coincida con una cadena de CIL con su homólogo de código de máquina y realizar un seguimiento de dónde se almacenan las variables locales y los argumentos de función. En .NET Framework versión 2.0 y posteriores, el compilador JIT siempre genera información de seguimiento, por lo que no es necesario solicitarla.
Puede solicitar al compilador JIT que no optimice el código de máquina resultante.
Normalmente, el compilador que genera la CIL establece estas opciones del compilador JIT de forma adecuada, en función de los modificadores ide o las opciones de línea de comandos que especifique, por ejemplo, /Od.
En algunos casos, es posible que desee cambiar el comportamiento del compilador JIT para que el código de la máquina que genera sea más fácil de depurar. Por ejemplo, puede que quiera generar información de seguimiento JIT para una optimización de compilación o control comercial. Puede hacerlo con un archivo de inicialización (.ini).
Por ejemplo, si el ensamblado al que desea depurar se llama MyApp.exe, puede crear un archivo de texto denominado MyApp.ini, en la misma carpeta que MyApp.exe, que contiene estas tres líneas:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
Puede establecer el valor de cada opción en 0 o 1 y cualquier opción ausente tiene como valor predeterminado 0. Establecer GenerateTrackingInfo
en 1 y AllowOptimize
en 0 proporciona la depuración más sencilla.
A partir de .NET Framework 2.0, el compilador JIT siempre genera información de seguimiento independientemente del valor de GenerateTrackingInfo
; sin embargo, el AllowOptimize
valor sigue teniendo un efecto. Al usar el Ngen.exe (Generador de imágenes nativas) para precompilar la imagen nativa sin optimización, el archivo .ini debe estar presente en la carpeta de destino con AllowOptimize=0
cuando se ejecute Ngen.exe. Si ha precompilado un ensamblado sin optimización, debe quitar el código precompilado mediante NGen.exe opción /uninstall antes de volver a ejecutar Ngen.exe para precompilar el código como optimizado. Si el archivo .ini no está presente en la carpeta, de forma predeterminada Ngen.exe precompila el código como optimizado.
Controla System.Diagnostics.DebuggableAttribute la configuración de un ensamblado. DebuggableAttribute incluye dos campos que controlan si el compilador JIT debe optimizar o generar información de seguimiento. En .NET Framework 2.0 y versiones posteriores, el compilador JIT siempre genera información de seguimiento.
En el caso de una compilación comercial, los compiladores no establecen ningún debuggableAttribute. De forma predeterminada, el compilador JIT genera el rendimiento más alto, más difícil de depurar código de máquina. La habilitación del seguimiento JIT reduce un poco el rendimiento y la deshabilitación de la optimización reduce mucho el rendimiento.
DebuggableAttribute se aplica a un ensamblado completo a la vez, no a módulos individuales dentro del ensamblado. Por lo tanto, las herramientas de desarrollo deben adjuntar atributos personalizados al token de metadatos de ensamblado, si ya se ha creado un ensamblado o a la clase denominada System.Runtime.CompilerServices.AssemblyAttributesGoHere. A continuación, la herramienta ALink promueve estos atributos DebuggableAttribute de cada módulo al ensamblado del que se convierten en parte. Si hay un conflicto, se produce un error en la operación ALink.
Nota:
En la versión 1.0 de .NET Framework, el compilador de Microsoft Visual C++ agrega debuggableAttribute cuando se especifican las opciones del compilador /clr y /Zi . En la versión 1.1 de .NET Framework, debe agregar debuggableAttribute manualmente en el código o usar la opción del enlazador /ASSEMBLYDEBUG .