Estoy usando Visual Studio 2010 en modo de depuración y tengo "optimizar código" sin marcar. No puedo ver rápidamente (ni pasar el mouse) ninguna variable en el depurador. Me sale este error "No se puede evaluar la expresión porque el código del método actual está optimizado".
Incluso una línea como: int i = -3, haciendo una observación rápida en i, obtengo "No se puede obtener el valor de local o argumento 'i' ya que no está disponible en este puntero de instrucción, posiblemente porque se ha optimizado".
Este enlace al que se hace referencia en una pregunta similar no parece aplicarse.
¿Hay alguna configuración que me falta?
c#
visual-studio
visual-studio-2010
Tony_Henrich
fuente
fuente
Respuestas:
Mientras el proyecto estaba en modo de depuración, la solución no. Cuando lo cambié, funcionó.
fuente
Tuve este problema cuando estaba usando VS 2010. Mi configuración de solución ha seleccionado (Depurar). Resolví esto desmarcando la propiedad Optimizar código en las propiedades del proyecto. Proyecto (clic derecho) => Propiedades => Compilación (pestaña) => desmarque Optimizar código
fuente
Parece que está depurando una compilación optimizada / lanzamiento, a pesar de tener la casilla optimizada sin marcar. Las cosas que puedes probar son:
Si no puede ver el elemento del menú Módulos en el menú Depurar -> Windows, es posible que deba agregarlo en el menú "Personalizar ...".
fuente
Project.Web
optimización no está marcada, pero aún se muestra como Optimizada cuando miro su ensamblaje enDebug > Modules
:(En VS2013, vaya a: Herramientas -> Opciones -> Depuración -> General y active 'Usar modo de compatibilidad administrada'. Esto deshabilita el comportamiento de evaluación de la nueva función.
fuente
Intente ejecutar en modo de depuración. Si está ejecutando en modo de liberación, recibirá este mensaje.
fuente
Mi situación no estaba cubierta por ninguna de las respuestas anteriores. Encontré lo siguiente: artículo de MSDN sobre subprocesos que explica que cuando está atrapado en algunas operaciones primitivas de subprocesamiento nativo, el depurador no puede acceder a los datos. Como ejemplo, cuando hay un hilo en Task.Wait (), aparece.
fuente
Yo tuve el mismo problema. Pero en mi caso, el
Debuggable
atributo estaba codificado en elAssemblyInfo.cs
archivo de mi proyecto y, por lo tanto, no (sobre) escrito por compilación. Funcionó después de eliminar la línea que especifica elDebuggable
atributo.fuente
Para mí estaba sucediendo en VS2017 y VS2019. Dejó de suceder después de que seleccioné la opción "Optimización JIT suprimida en la carga del módulo".
fuente
Tuve el mismo problema en VS2008. En mi caso, se resolvió a través de la solución de reconstrucción.
fuente
Además de @Kragen mencionado, si está depurando un proyecto web
cierre el estudio visual e intente eliminar los archivos temporales en C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Archivos temporales ASP.NET
fuente
Otra cosa que puede hacer es crear un archivo con el mismo nombre que el archivo dll que está optimizado pero con extensión ini y agregarle lo siguiente:
[Control de depuración de .NET Framework]
GenerateTrackingInfo = 1
AllowOptimize = 0
Esto le dirá al JIT que no optimice sus variables.
Tenga en cuenta que todavía necesita el pdb, por lo que terminará con algo como esto: yourDll.dll yourDll.pdb yourDll.ini
Esto funciona especialmente bien en escenarios en los que no tiene acceso para volver a generar los dlls con la opción de depuración.
http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx
fuente
Cuando vea el mensaje " No se puede evaluar la expresión porque el código del método actual está optimizado " después de emitir una
Debugger.Break()
declaración, asegúrese de presionar F10 para pasar a la siguiente declaración.Una vez que pase a la siguiente declaración, y suponiendo que esté ejecutando una compilación de depuración, este mensaje debería desaparecer.
fuente
Con respecto al problema con la propiedad "Optimizar código" SIN COMPROBAR pero el código aún se compila como optimizado: Lo que finalmente me ayudó después de intentar todo fue marcar la casilla de verificación "Habilitar depuración de código no administrado" en la misma página de configuración (Propiedades del proyecto - Depuración). No se relaciona directamente con la optimización del código, pero con esto habilitado, VS ya no optimiza mi biblioteca y puedo depurar.
fuente
Tuve el mismo problema al depurar una biblioteca de clases desde una aplicación web de banco de pruebas. Estaba haciendo referencia a la versión de lanzamiento en el banco de pruebas y estaba configurado para ser optimizado en las propiedades de la biblioteca de clases.
Desactivar la casilla de verificación optimizar código para la versión de lanzamiento en las propiedades de la biblioteca de clases, justo mientras lo estoy escribiendo, ha resuelto el problema.
fuente
Me doy cuenta de que esta es una respuesta posterior, pero encontré otra referencia a una forma de abordar este problema que podría ayudar a otros en el futuro. Esta página web describe cómo configurar una variable de entorno (COMPLUS_ZapDisable = 1) que impide la optimización, ¡al menos lo hizo para mí! (No olvide la segunda parte de deshabilitar el proceso de alojamiento de Visual Studio). En mi caso, esto podría haber sido aún más relevante porque estaba depurando una DLL externa a través de un servidor de símbolos, pero no estoy seguro.
fuente
Tuve este problema con un proyecto de F # que había estado aquí y allá entre Visual Studio y MonoDevelop, quizás originado en este último (lo olvidé). En VS, la casilla de optimización no estaba marcada, pero la optimización ciertamente parecía estar ocurriendo en lo que respecta al depurador.
Después de comparar el XML del archivo del proyecto con el de un archivo saludable, el problema era obvio: el proyecto saludable tenía un valor explícito
<optimize>false</optimize>
línea , mientras que al malo le faltaba por completo. VS obviamente deducía de su ausencia que la optimización estaba deshabilitada, mientras que el compilador estaba haciendo lo contrario.La solución fue agregar esta propiedad al archivo del proyecto y volver a cargar.
fuente
Comencé a recibir este mensaje cuando migré a Visual Studio 2017. Ninguna de las ideas en esta página que probé funcionó para mí. En otra publicación encontré esta sugerencia y funcionó: eliminar:
... desde su archivo AssemblyInfo.
fuente
Tuve el mismo problema en VS 2010. Limpié y reconstruí la solución y funcionó.
fuente
El comentario de vickramds anterior, que se refiere a http://torulflundgren.blogspot.com.au/2010/03/cannot-obtain-value-of-local-or.html , lo hizo por mí. Verifiqué todo: eliminé todos los archivos dll, pdb de las carpetas bin locales, limpié, reconstruí, borré todas las carpetas de archivos temporales ASP.NET, me aseguré de que los indicadores TRACE / DEBUG estuvieran configurados, verifiqué las rutas DLL, etc.
Para dejarlo para que no se pierda, para los proyectos afectados:
Propiedades del proyecto -> Compilación -> Avanzado -> Información de depuración: Completo.
Desea comprobar que tiene seleccionada la configuración de Depuración antes de hacer esto, a menos que, por supuesto, tenga la intención de lo contrario.
fuente
Si está intentando depurar un proyecto ASP.NET, asegúrese de que el menú desplegable Propiedades> Web> Servidores del proyecto esté configurado en "IIS Express" (además de verificar todo lo demás aquí).
fuente
Había mezclado dlls de extensión c ++ / cli mfc, que se optimizaron incluso si la configuración de depuración (vista desde la ventana de Módulos VS 2017). Como sugirió la respuesta anterior, cambié "En VS2013, vaya a: Herramientas -> Opciones -> Depuración -> General y habilite 'Usar modo de compatibilidad administrada'. Esto deshabilita el comportamiento de evaluación de la nueva función". Esa configuración también se encuentra en VS 2017.
Pero eso no fue suficiente, por lo que también copié la configuración UseDebugLibraries del archivo de proyecto de otra aplicación MFC al archivo de proyecto dll de extensión.
Luego reconstruir y eso solucionó el problema.
fuente
En Visual Studio 2012, habilitar la opción " Administrado " desde Herramientas> Depuración> Just-In-Time funcionó para mí.
fuente