tutorial c debugging gdb

c - tutorial - gdb linux



gdb: Sin símbolo "i" en el contexto actual (5)

Al depurar un programa C en gdb, tengo un punto de interrupción en un bucle 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?

Aquí está el ciclo:

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


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


Probablemente se haya 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 e intente de nuevo.


Puedes intentar declarar que soy volatile . Eso evitará algunas optimizaciones del compilador (y espero que las haga visibles dentro del depurador).


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


Me encontré con 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í obteniendo los errores "Sin símbolo" xyz "en contexto actual" 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.