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.
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.
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).
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)
Si compila con las optimizaciones habilitadas, se eliminarán muchas variables; Por ejemplo:
SomeType value = GetValue();
DoSomething(value);
aquí la variable local value
normalmente 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 value
porque 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.