GDB: внутренняя ошибка установки точек останова - PullRequest
7 голосов
/ 05 января 2011

Моя программа скомпилирована с флагом -g.У меня возникла следующая проблема:

1) Я установил точку останова в функции, которая находится в файле заголовка.

Точка останова работает.Теперь, когда я поднимаюсь на два уровня выше, это должно привести меня к C-файлу (Sizer.C: 505).Да, но я получаю множество предупреждений:

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) Если я СЕЙЧАС (после перехода на два уровня вверх, когда программа находится в состоянии прерывания), попробуйте напрямую установить точку останова в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.)

Программа вообще не останавливается на точке останова.

3) Просто для полноты: если я установлю точку останова в Sizer.C до запуска программы, Я не получаю предупреждений, но программа по-прежнему не прерывается.

Я хочу установить точки останова в Sizer.C.Как я могу отладить и исправить эту проблему?

1 Ответ

3 голосов
/ 05 января 2011

Это похоже на ошибку в GDB.Проверьте эту страницу: http://sourceware.org/ml/gdb-patches/2003-01/msg00074.html для более подробной информации.Какую версию GDB вы используете?попробуйте обновить до последней версии и попробуйте снова.Обновление должно решить вашу проблему.

[Обновить]

Я также нашел эту ссылку: http://sourceware.org/ml/gdb/2006-06/msg00123.html

Здесь упоминается обходной путь.попробуйте комментировать код, как указано.

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