2011-01-05 23 views
7

Mi programa se compila con el indicador -g. Tengo el siguiente problema:gdb: error interno configuración de puntos de interrupción

1) He establecido un punto de interrupción en una función que está en un archivo de cabecera.

El punto de interrupción funciona. Ahora, cuando suba dos niveles, se supone que me llevará a un archivo C (Sizer.C: 505). Lo hace, pero me da un montón de advertencias:

warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 
warning: (Internal error: pc 0xff6324 in read in psymtab, but not in symtab.) 
warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 
warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 
#2 0x0000000000ff6324 in SizePacketImpl<ZValue>::begin_x (this=warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 
0x4888a88, bi=warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 
0x56e6968) at Sizer.C:505 
505   ASSERTo(...some parameters ....); 
warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 

2) Si EMPRESA (después de pasar dos niveles cuando el programa está en el estado de interrupción) intento fijar directamente en el punto de interrupción Sizer.C

(gdb) break Sizer.C:504 
warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 

Breakpoint 3 at 0xff1bc7: file Sizer.C, line 504. 
warning: (Internal error: pc 0xff6323 in read in psymtab, but not in symtab.) 

El programa no se detiene en absoluto en el punto de interrupción.

3) Solo por completitud: si configuro el punto de interrupción en Sizer.C antes de ejecutar el programa, no recibo las advertencias, pero el programa aún no se rompe.

Quiero establecer puntos de interrupción en Sizer.C. ¿Cómo puedo depurar y solucionar este problema?

Respuesta

3

Esto parece ser un error en gdb. Compruebe esta página: http://sourceware.org/ml/gdb-patches/2003-01/msg00074.html para más detalles. ¿Cuál es la versión de gdb que estás usando? intenta actualizar a la última versión y vuelve a intentarlo. La actualización debería solucionar tu problema.

[Actualización]

también encontré este enlace: http://sourceware.org/ml/gdb/2006-06/msg00123.html

Aquí una solución alternativa se menciona. intente comentar el código como se menciona.

if (low == 0 && (bfd_get_file_flags (obfd) & HAS_RELOC) == 0) > return 0; 
+0

Estoy usando 6.3.0. Lo siento, no entendí tu solución. ¿Dónde debería poner esto? –

+0

Creo que la parte de actualización no es relevante para este caso en particular. Está relacionado con la compilación de gdb de forma manual. Por favor ignórelo. –

+0

La actualización a 7.1 solucionó los problemas. Gracias :) –

Cuestiones relacionadas