No se puede obtener el valor del argumento o local porque no está disponible en este puntero de instrucción, posiblemente porque se ha optimizado.

Resuelto curiousity asked hace 13 años • 17 respuestas

Visual Studio 2010 elimina (no hay otra palabra) datos en uno de los argumentos de la función en el bloque inseguro. ¿Qué podría causar este error? El siguiente mensaje muestra el depurador.

Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away.
curiousity avatar Nov 29 '11 20:11 curiousity
Aceptado

Vaya a Propiedades del proyecto y en Generar. Asegúrese de que la casilla de verificación "Optimizar código" no esté marcada.

Además, configure el menú desplegable "Información de depuración" en "Completo" en las Opciones avanzadas (en la pestaña Generar).

Karthik avatar Aug 26 '2014 16:08 Karthik

También en VS 2015 Community Edition

vaya a Depurar->Opciones o Herramientas->Opciones

y marque Depuración->General->Suprimir optimización JIT en la carga del módulo (solo administrado)

xyq.384.b avatar Dec 20 '2015 21:12 xyq.384.b

Si compila con las optimizaciones habilitadas, se eliminarán muchas variables; Por ejemplo:

SomeType value = GetValue();
DoSomething(value);

aquí la variable local valuenormalmente se eliminaría, manteniendo el valor en la pila, un poco como si hubiera escrito:

DoSomething(GetValue());

Además, si un valor de retorno no se utiliza en absoluto , se eliminará mediante "pop" (en lugar de almacenarse en un local mediante "stloc", y nuevamente; el local no existirá).

Debido a esto, en dicha compilación el depurador no puede obtener el valor actual de valueporque no existe ; solo existe durante el breve instante entre GetValue()y DoSomething(...).

Entonces; si desea depurar... ¡no utilice una versión de lanzamiento! o al menos, deshabilite las optimizaciones mientras depura.

Marc Gravell avatar Nov 29 '2011 13:11 Marc Gravell