2016-07-02 3 views
0

У меня есть только доступ к исполняемому файлу C (нет исходного кода/.c), и мне нужно использовать gdb для его отладки. Но я продолжаю получать (не найдено отладочных символов) сообщение. Я видел другие вопросы, подобные этому, но большинство из них предлагает перекомпилировать исходный код (что-то, чего я не могу сделать, потому что у меня его нет) или предложить следующие исправления (см. Ниже), которые не сработали для меня.gdb: Не удается перекомпилировать исполняемый файл: (не найдены отладочные символы)

gdb test 
Reading symbols from /usr/bin/test...(no debugging symbols found)...done. 
(gdb) b main 
Function "main" not defined. 
Make breakpoint pending on future shared library load? (y or [n]) n 
(gdb) b 2 
No symbol table is loaded. Use the "file" command. 
(gdb) file test 
Reading symbols from /usr/bin/test...(no debugging symbols found)...done. 
(gdb) exec-file test 
(gdb) file test 
Reading symbols from /usr/bin/test...(no debugging symbols found)...done. 
(gdb) b 2 
No symbol table is loaded. Use the "file" command. 

В качестве побочного примечания я не могу сломать основной (странно, потому что я могу гарантировать, что это исполняемый файл C).

Я новичок в использовании gdb и невероятно потерян и очень ценю любую помощь. Спасибо заранее!

EDIT:

Как было предложено @ Жан-Франсуа Фабр, я изменил имя исполняемого файла для Foobar, но все еще работает с теми же проблемами. Выход выше был обновлен:

gdb foobar 
Reading symbols from /usr/bin/foobar...(no debugging symbols found)...done. 
(gdb) b main 
Function "main" not defined. 
Make breakpoint pending on future shared library load? (y or [n]) n 
(gdb) b 2 
No symbol table is loaded. Use the "file" command. 
(gdb) file foobar 
Reading symbols from /usr/bin/foobar...(no debugging symbols found)...done. 
(gdb) exec-file foobar 
(gdb) file foobar 
Reading symbols from /usr/bin/foobar...(no debugging symbols found)...done. 
(gdb) b 2 
No symbol table is loaded. Use the "file" command. 
+1

Следуйте за предложением переименовать Jean-Francois ниже. Существуют и другие команды [вне gdb]: 'objdump',' readelf -s', 'ldd',' file', чтобы рассказать вам о символах в файле [которые должны присутствовать, даже если информация об отладке была раздел]. Ошибка [в gdb] 'b main' могла быть проблемой'/usr/bin/test' –

+0

Спасибо @Craig Estey! Эти инструменты были очень полезны! – Her

ответ

1

Но я продолжаю получать (не отладочные символы не найден) сообщение.

Это сообщение означает, что ваш исполняемый файл не имеет информации об отладке.

Я не могу сломать главный (странно, потому что я могу гарантировать, что это C-исполняемый файл).

Это, вероятно, означает, что ваш исполняемый файл полностью удален (его таблица символов удалена, таблица символов помогает при отладке, но во время выполнения она совершенно не нужна).

Мне нужно использовать gdb для его отладки.

Это прекрасно: вы все равно можете отлаживать этот исполняемый файл, но только на уровне сборки. Без таблицы символов вы сможете устанавливать точки останова только на отдельных адресах инструкций, а не на каких-либо функциях.

Если ваш исполняемый файл динамически связан, вы все равно сможете установить точки останова на внешние функции, такие как printf или malloc (если ваш исполняемый файл вызывает их).

+0

Спасибо за информацию! Я полностью забыл о динамически связанных/загруженных исполняемых файлах (довольно глупо от меня). Является ли отсутствие таблицы символов признаком того, что мой исполняемый файл динамически связан/загружен? – Her

+0

Помимо комментария, который я только что опубликовал, я могу, наконец, сделать то, что хочу с помощью gdb, то есть использовать x/s и info registers и т. Д.! Спасибо вам и @ Craig Estey! – Her

0

Никогда не называйте ваш исполняемый test потому что стандартный тест команды Unix/Linux из/USR/бен сначала берется в PATH (не проблема, на окнах)

нотой полный путь test:

Reading symbols from /usr/bin/test...(no debugging symbols found)...done. 

Переименовать исполняемый foobar вы сможете отладить его, или просто введите

gdb ./test 

Но мой совет - держаться подальше от testomething для исполняемых имен. Если вы это сделаете, вы наткнетесь на эту проблему.

экс сценария снят с погуглить test2:

ln -s test $RPM_BUILD_ROOT/usr/bin/test2 
+0

Просто попытался это сделать. Еще не повезло. :( Должен ли я отредактировать свой вопрос? Не уверены в правилах Stackoverflow – Her

+0

Чтобы сохранить целостность этого ответа, я отредактирую ваш вопрос, оставьте исходное имя и результаты _append_ с новым/измененным именем. –

+0

@Her : до сих пор не удастся описать вероятную следующую проблему, с которой вы столкнулись. У вас были проблемы n, теперь у вас проблемы с n-1. Повторите до n == 0. –

Смежные вопросы