GDB без GCC - PullRequest
       15

GDB без GCC

3 голосов
/ 22 января 2010

Можно ли запустить GDB с программой, собранной с as и связанной с ld? С gcc добавление флага -g позволяет отлаживать, но я получаю ошибку No symbol table is loaded. Use the "file" command, когда пытаюсь добавить точки останова в загруженную программу.

Спасибо!

РЕДАКТИРОВАТЬ Может быть, я должен дать понять, что я учусь и программирую на ассемблере. Все, что мне действительно нужно, - это трассировка стека, но было бы здорово использовать GDB.

Разрешение Запуск as -g делает свое дело.

Спасибо всем, кто ответил !!

Ответы [ 4 ]

5 голосов
/ 22 января 2010

Это возможно. Однако вам нужны символы для добавления символических точек останова, а символы предоставляются информацией отладки; убедитесь, что ваш ассемблер и компоновщик предоставляют их. РЕДАКТИРОВАТЬ С GNU as, используйте as -g. Или просто используйте gcc -g: если вы дадите ему файл .s, он при необходимости вызовет ассемблер и компоновщик.

GDB понимает информацию отладки в нескольких форматах: удары , COFF , PE , DWARF , SOM, (Некоторые из них являются исполняемыми форматами с разделами отладки, другие являются форматами отладочной информации, которые могут быть встроены в исполняемые файлы, такие как ELF.) gcc -g обычно выбирает то, что по умолчанию для платформы, gcc -ggdb обычно выбирает наиболее выразительный (в зависимости от ваши версии, возможно DWARF-3).

Если у вас есть отладочная информация, встроенная в исполняемый файл или связанная с ней, gdb попытается загрузить ее автоматически. Если он у вас есть в другом месте, вам может понадобиться file, чтобы указать gdb, где его найти.

Вы все еще можете отлаживать без символической информации. Например, вы можете ввести break *0x89abcdef, чтобы вставить точку останова по этому адресу, если там есть код.

3 голосов
/ 22 января 2010

вы можете попробовать запустить as с опциями --gdwarf-2 или -g и убедиться, что ld не вызывается с --strip-debug, и что ваш процесс makefile / install не удаляет исполняемый файл ,

2 голосов
/ 22 января 2010

Это не ошибка, препятствующая отладке, это ошибка установки точек останова в том, как вы пытаетесь это сделать. Поскольку GDB не имеет никакой символьной информации, вам придется установить точки останова другим способом.

1 голос
/ 22 января 2010

Если у вас нет таблицы символов, то вы не можете установить контрольные точки символически (по имени функции, строке кода и т. Д.). Вы все еще можете установить точку останова для определенного адреса, если знаете адрес, по которому пытаетесь остановиться.

gdb>  b 0x12345678

Конечно, это полезно, только если вы знаете, что хотите остановиться на 0x12345678

Что file говорит о вашем исполняемом файле?

...