2010-09-21 13 views
17

Al depurar un programa C en gdb, tengo un punto de interrupción en un ciclo for. No puedo imprimir el valor de "i" (obtengo: No aparece el símbolo "i" en el contexto actual). Puedo imprimir el valor de todas las otras variables. ¿Es normal?gdb: Ningún símbolo "i" en el contexto actual

Aquí es el bucle:

for (i=0; i < datasize; i++){ 
    if (feature_mask[i] > 0){ 
     k = feature_mask[i] - 1; 
     if (neighbors[k][nmax-1] != 0){ 
      neighbors[k][nmax-1] = bvalue; 
      feature_mask[i] = -feature_mask[i]; 
     } 
    } 
} 

Gracias

Respuesta

19

Probablemente ha sido optimizado fuera de su código compilado ya que solo usa feature_mask[i] dentro del ciclo.

¿Especificó un nivel de optimización cuando llamó a su compilador? Si usaba gcc, simplemente omita las opciones -O y vuelva a intentarlo.

4

Asegúrese de que el programa se compila sin optimización, y con la depuración habilitada información. Es bastante probable que el contador de bucles termine en un registro.

2

Compruebe sus opciones de optimización. Es posible que GCC pueda reemplazar la variable con un puntero en feature_mask.

3

Puede intentar declararlo como volatile. Eso evitará algunas optimizaciones del compilador (y con suerte hará que i sea visible dentro del depurador).

+12

Esto es tonto. No trabaje en torno a las optimizaciones: compile siempre sin optimizaciones para la depuración (excepto en el caso raro de que un error solo se manifieste con optimizaciones, pero esa es otra historia). –

+1

Estoy de acuerdo con Daniel. +1 por su comentario – pmg

16

Encontré este problema recientemente. Recopilé GCC 5.1 y luego lo usé para compilar una base de código C++ 11. Y, aunque podía recorrer el código del programa en gdb, no podía imprimir el valor de ninguna variable, seguía obteniendo “ Sin símbolo "xyz" en el contexto actual ” errores, para cada variable.

Estaba usando gdb 7.4, pero la última versión disponible en ese momento era 7.9. Descargué la última versión de gdb y la compilé (usando GCC 5.1) y cuando usé gdb 7.9 pude inspeccionar nuevamente los valores de las variables.

Supongo que la información de depuración de GCC 5.1 es incompatible con gdb 7.4.

+1

De hecho, vea [esta respuesta] (http://stackoverflow.com/a/15051109/673852). – Ruslan

Cuestiones relacionadas