2011-01-05 6 views
7

Mój program jest skompilowany z flagą -g. Mam następujący problem:gdb: wewnętrzne ustawienia błędów granicznych

1) Ustawiłem punkt przerwania w funkcji, która znajduje się w pliku nagłówkowym.

Punkt przerw działa. Teraz, kiedy mam dwa poziomy wyżej, powinien mnie zabrać do pliku C (Sizer.C: 505). To robi, ale dostaję mnóstwo ostrzeżeń:

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) Gdybym TERAZ (po przejściu dwupoziomowa się, gdy program jest w stanie rozpadu) starają się bezpośrednio ustawić punkt przerwania w 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.) 

Program nie zatrzymuje się w punkcie przerwania.

3) Tylko dla kompletności: Jeśli ustawię punkt przerwania w Sizer.C przed uruchomieniem programu, nie otrzymam ostrzeżeń, ale program nadal się nie psuje.

Chcę ustawić punkty przerwania w Sizer.C. Jak mogę debugować i naprawić ten problem?

Odpowiedz

3

To wygląda na błąd w gdb. Sprawdź tę stronę: http://sourceware.org/ml/gdb-patches/2003-01/msg00074.html, aby uzyskać więcej informacji. Jakiej wersji GDB używasz? spróbuj uaktualnić do najnowszej wersji i spróbuj ponownie. Aktualizacja powinna rozwiązać problem.

[Aktualizacja]

Ja również znaleźć ten link: http://sourceware.org/ml/gdb/2006-06/msg00123.html

Tutaj obejście jest wymieniona. spróbuj skomentować kod, jak wspomniano.

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

Używam 6.3.0. Niestety, nie rozumiem Twojego obejścia. Gdzie mam to położyć? –

+0

Myślę, że część aktualizacji nie ma znaczenia dla tego konkretnego przypadku. Jest to związane z ręcznym kompilowaniem gdb. Zignoruj ​​to. –

+0

Aktualizacja do wersji 7.1 rozwiązała problemy. Dzięki :) –