Я пытаюсь запустить свое приложение на gdb. Поэтому я скомпилировал его с 'g' опцией. Но когда я работаю gdb ./app
Я добираюсь:
DW_FORM_strp pointing outside of .debug_str section [in module /home/w/app]
И я не могу сделать никакого повреждения:
(gdb) break main
No symbol table is loaded. Use the "file" command.
(gdb) .
Скорее всего, вы скомпилировали свою программу с более новой версией GCC, но отлаживаете ее с помощью старой GDB.
Иначе у вас есть версия GCC с ошибками, которая помещает неверную информацию об отладке в ваш исполняемый файл.
Используйте objdump -W
, чтобы просмотреть отладочную информацию Dwarf в файле Elf и увидеть таблицу .debug_str
.
Каждый DW_FORM_strp
представляет собой смещение в этой таблице.
Компиляция с помощью -g
(или -g-dwarf2
) помещает информацию о карликах в каждый объектный файл.
со своей собственной частью строк раздела .debug_str
.
Связывание этих объектных файлов с помощью -g пытается создать уникальные строки и не обновляет все смещения DW_FORM_strp
должным образом. Встречается с gcc 4.3.4's ld.
Мы случайно добавили CC_FLAGS
к ссылке на make-файл.
Обходной путь: не связывайте с флагом -g
.