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.
Al depurar una aplicación .NET, es posible que encuentre que desea ver el código fuente que no tiene. Por ejemplo, interrumpir en una excepción o usar la pila de llamadas para navegar a una ubicación de origen.
Nota:
- La generación de código fuente (descompilación) solo está disponible para aplicaciones .NET y se basa en el proyecto ILSpy de código abierto.
- La descompilación solo está disponible en Visual Studio 2019 16.5 y versiones posteriores.
- La aplicación del atributo SuppressIldasmAttribute a un ensamblado o módulo impide que Visual Studio intente descompilar. Aunque el atributo está obsoleto en .NET 6 y versiones posteriores, Visual Studio respeta el atributo .
Generación de código fuente
Cuando estás depurando y no hay código fuente disponible, Visual Studio muestra el documento Source Not Found, o si no tienes símbolos para el ensamblaje, el documento No Symbols Loaded. Ambos documentos tienen una opción de código fuente Decompile que genera código C# para la ubicación actual. Después, el código de C# generado se puede usar igual que cualquier otro código fuente. Puede ver el código, inspeccionar variables, establecer puntos de interrupción, etc.
Sin símbolos cargados
En la ilustración siguiente se muestra el mensaje Sin símbolos cargados .
Origen no encontrado
En la ilustración siguiente se muestra el mensaje Origen no encontrado .
Código de compilación automática
A partir de la versión 17.7 de Visual Studio 2022, el depurador de Visual Studio admite la descompilación automática del código .NET externo. Puede descompilar automáticamente al entrar en código externo o al usar la ventana de pila de llamadas.
Si entra en el código que se ha implementado externamente, el depurador lo descompila automáticamente y muestra el punto de ejecución actual. Si desea entrar en código externo, deshabilite Solo mi código.
Puede descompilar desde la ventana Pila de llamadas sin deshabilitar Solo mi código.
Para compilar automáticamente desde la ventana Pila de llamadas:
Mientras se depura con la ventana Pila de llamadas abierta, seleccione Mostrar código externo.
En la ventana Pila de llamadas, haga doble clic en cualquier marco de pila. El depurador descompila el código y, a continuación, navega directamente al punto de ejecución actual.
Todo el código descompilado también se muestra en el nodo Orígenes externos en Explorador de soluciones, lo que facilita la exploración de los archivos externos si es necesario.
Puede depurar el código descompilado y establecer puntos de interrupción.
Para deshabilitar la descompilación automática del código externo:
Abra el panel Herramientas>Opciones y expanda la sección Todos los ajustes>Depuración>General.
En el panel derecho, desactive la casilla Descompilar automáticamente al código fuente cuando sea necesario (solo administrado).
Abra el cuadro de diálogo Opciones de herramientas> y expanda la sección Depuración>.
En el panel derecho, desactive la casilla Descompilar automáticamente al código fuente cuando sea necesario (solo administrado).
Selecciona Aceptar.
Generación e inserción de fuentes para un ensamblaje
Además de generar código fuente para una ubicación específica, puede generar todo el código fuente para un ensamblado de .NET determinado. Para realizar esta tarea, vaya a la ventana Módulos y en el menú contextual de un ensamblado de .NET y, a continuación, seleccione el comando Decompile Source to Symbol File (Descompilar origen en archivo de símbolos ). Visual Studio genera un archivo de símbolos para el ensamblado y, a continuación, inserta el origen en el archivo de símbolos. En un paso posterior, puede extraer el código fuente incrustado.
Extracción y visualización del código fuente incrustado
Puede extraer archivos de código fuente incrustados en un archivo de símbolos mediante el comando Extraer código fuente en el menú contextual de la ventana Módulos .
Los archivos de código fuente extraídos se agregan a la solución como archivos varios. La característica de archivos varios está desactivada de forma predeterminada en Visual Studio. Si la característica no está habilitada, no puede abrir el código fuente extraído.
Puede habilitar la característica en el menú Opciones de herramientas>.
Abra el panel de Herramientas>Opciones y expanda la sección de Toda la Configuración>Entorno>Documentos.
En el panel derecho, active o desactive la casilla Mostrar archivos varios en el Explorador de soluciones.
Si selecciona la opción , puede especificar el número de elementos guardados en el proyecto Archivos varios.
Para aplicar los cambios, reinicie Visual Studio.
Abra el cuadro de diálogo Opciones de herramientas> y expanda la secciónDocumentosde entorno>.
En el panel derecho, active o desactive la casilla Mostrar archivos varios en el Explorador de soluciones.
Si selecciona la opción , puede especificar el número de elementos guardados en el proyecto Archivos varios.
Selecciona Aceptar.
Los archivos de origen extraídos aparecen en los archivos misceláneos en el Administrador de soluciones.
SourceLink
En el caso de las bibliotecas de .NET o para los paquetes NuGet habilitados para SourceLink, también puede entrar en código fuente, establecer puntos de interrupción y usar todas las características del depurador. Para obtener más información, consulte Habilitación de la depuración y el diagnóstico con Source Link y Mejora de la productividad en tiempo de depuración con Source Link.
Limitaciones conocidas
Limitaciones de descompilación
La generación de código fuente a partir del formato intermedio (IL) que se usa en los ensamblados de .NET tiene algunas limitaciones inherentes. Por lo tanto, el código fuente generado no es similar al código fuente original. La mayoría de las diferencias se encuentran en lugares donde la información del código fuente original no es necesaria en tiempo de ejecución. Por ejemplo, no se necesita información como espacios en blanco, comentarios y nombres de variables locales en tiempo de ejecución. Se recomienda usar el origen generado para comprender cómo se ejecuta el programa y no como reemplazo del código fuente original.
Depuración de ensamblados optimizados o de publicación
Al depurar el código descompilado desde un ensamblado que se compiló mediante optimizaciones del compilador, es posible que se produzcan los siguientes problemas:
- Es posible que los puntos de ruptura no siempre se asocien a la ubicación de origen coincidente.
- Es posible que la ejecución paso a paso no siempre vaya a la ubicación correcta.
- Es posible que las variables locales no tengan nombres precisos.
- Es posible que algunas variables no estén disponibles para la evaluación.
Puede encontrar más detalles en el problema de GitHub: integración de ICSharpCode.Decompiler en VS Debugger.
Confiabilidad de la descompilación
Un porcentaje relativamente pequeño de intentos de descompilación puede dar lugar a errores. Este comportamiento se debe a un error de referencia nula de punto de secuencia en ILSpy. Hemos atenuado el error al detectar estos problemas y manejar con elegancia el intento fallido de descompilación.
Puede encontrar más detalles en el problema de GitHub: integración de ICSharpCode.Decompiler en VS Debugger.
Limitaciones con código asincrónico
Los resultados de la descompilación de módulos con patrones de código async/await pueden estar incompletos o generar errores por completo. La implementación de ILSpy de async/await y yield máquinas de estado está solo parcialmente implementada.
Puede encontrar más detalles en el problema de GitHub: Estado del generador de PDB.
Solo mi código
La configuración Just My Code (JMC) permite que Visual Studio supere el sistema, el marco, la biblioteca y otras llamadas que no son de usuario. Durante una sesión de depuración, la ventana Módulos muestra qué módulos de código trata el depurador como Mi código (código de usuario).
La descompilación de módulos optimizados o de versión genera código que no es de usuario. Si el depurador se interrumpe en el código que no es de usuario descompilado, por ejemplo, aparece la ventana Sin origen . Puede deshabilitar la característica Just My Code enel menú> o Opciones de depuración>.
Abra el panel Herramientas>Opciones y expanda la sección Todos los ajustes>Depuración>General. Desactive la casilla Habilitar solo mi código .
Abra el cuadro de diálogo Opciones de herramientas> y expanda la sección Depuración>. Desactive la casilla Habilitar solo mi código .
Orígenes extraídos
El código fuente extraído de un ensamblado tiene las siguientes limitaciones:
- El nombre y la ubicación de los archivos generados no se pueden configurar.
- Los archivos son temporales y los elimina Visual Studio.
- Los archivos se colocan en una sola carpeta, y no se utiliza la jerarquía de carpetas que tenían las fuentes originales.
- El nombre de cada archivo contiene un hash de verificación del archivo.
El código generado es solo C#
La descompilación solo genera archivos de código fuente en C#. No hay ninguna opción para generar archivos en ningún otro idioma.