visual ventana studio missing locales inspeccion depuracion autos c++ visual-studio watch

c++ - ventana - add watch muestra undefined identifier visual studio 2012, cpp



view variables visual studio (7)

Me encuentro con el comportamiento más extraño en VS 2012 (estoy escribiendo en cpp).

Hago clic en "agregar reloj" en una variable y dice "el identificador no está definido".

Aquí hay un ejemplo del código:

for (int j=0;j<32;j++) { unsigned char curValue=desc1.at<unsigned char>(0,j); printf("%s/n",curValue); }

Tuve que usar printf para mostrar el valor de curValue. jajaja

¿Alguien ha encontrado tal comportamiento?

Edit: más extraño esto ocurre. Al depurar el siguiente código:

int b1[8]; for (int k=0;k<7;k++) b1[k]=0; char q=curValue; int t=0; while (q!=0){ b1[t++]=q%2; q=q/2; }

El depurador simplemente salta el bucle con b1 [k] = 0;

Tenga en cuenta que curValue no está definido incluso dentro del bucle.

¡Gracias!


Como dijo Joachim: curValue se define dentro del bucle. Si la ventana de visualización en Visual Studio lo ve como un valor indefinido, entonces debe desactivar la optimización del compilador.

La optimización del compilador por defecto es / O2 optimiza para la velocidad. Para apagarlo:

  • Ir al proyecto, clic derecho y elegir propiedades.
  • Propiedades de configuración-> C / C ++ -> Optimización
  • seleccione optimización y cámbiela de Maximizar velocidad (/ O2) a Deshabilitado (/ Od)

El valor de curValue variable curValue es válido dentro del bucle. Si intenta agregarlo al "reloj" cuando no está en el bucle, entonces su variable no estará definida.

Nota: Mejor debes imprimir esto:

printf("%c/n",curValue);

En lugar de esto:

printf("%s/n",curValue)


Porque curValue se sale del ámbito fuera del bucle for .

También tenga en cuenta que debe usar %c en printf para imprimir caracteres. %s se utiliza para cadenas de estilo C

printf("%c/n",curValue);


Recuerde que la variable curValue solo es válida dentro del bucle, si intenta agregarlo al reloj cuando no está en el bucle, entonces la variable no está definida.


Reinicie Visual Studio. Trabajó para mi.


Sin el printf, el primer bucle no tiene efectos secundarios y, por lo tanto, es probable que se optimice en una compilación optimizada. En el segundo ejemplo, el bucle que inicializa la matriz pequeña a 0 probablemente se reemplace con una sección de datos inicializados.

Probablemente deberías intentar depurar con una compilación no optimizada.

También tenga en cuenta que el depurador de Visual Studio tiene visualizadores bastante buenos para los contenedores estándar. Por lo tanto, si todo el punto del primer bucle era solo echar un vistazo al contenido de desc1 , es probable que pueda examinarlo directamente en el depurador.


Tuve optimizaciones encendidas. Eso arruinó mi depuración.