GDB выдает?? символы для ошибки segmentaion в ubuntu

#c #segmentation-fault #gdb #debug-symbols

#c #ошибка сегментации #gdb #отладка-символы

Вопрос:

Я пытаюсь отладить свое приложение для программирования на c , используя gdb на сервере Ubuntu, потому что это приводит к ошибке сегментации. Но файл выдает?? символы, которые нечитаемы для меня, когда я пытаюсь bt это дает мне.

 (gdb) bt
#0  0x00007f141956d277 in ?? ()
#1  0x00007ffc1a866bd0 in ?? ()
#2  0x000055e1f101d5e0 in ?? ()
#3  0x00007ffc1a866db0 in ?? ()
#4  0x000055e1f1433e70 in ?? ()
#5  0x00007ffc1a866bd0 in ?? ()
#6  0x000055e1f10224a9 in ?? ()
#7  0x000055e1f14341f8 in ?? ()
#8  0x00000001f14344d0 in ?? ()
#9  0x0000000000000000 in ?? ()
  

Я перешел по этой ссылке, и мне сказали загрузить эти символы

 symbol-file /path/to/my/binary
sharedlibrary

  

sharedlibrary Был найден, но путь к файлу символа отсутствует. Итак, это каким-то образом изменило bt вывод команды

 (gdb) bt
#0  tcache_get (tc_idx=0) at malloc.c:2943
#1  _GI__libc_malloc (bytes=19) at malloc.c:3050
#2  0x000055e1f10224a9 in ?? ()
#3  0x000055e1f14341f8 in ?? ()
#4  0x00000001f14344d0 in ?? ()
#5  0x0000000000000000 in ?? ()
  

Я все еще не понимаю ошибку.

Теперь я не знаю, что это проблема из-за того, что GDB не имеет этого symbol-file или это проблема компиляции, которую я не знаю, как или этого достаточно для меня для отладки, но я следил за отладкой ошибки сегментации, и это было намного понятнее для устранения неполадок.

Когда я ищу похожие случаи, на все из них были даны ответы только для их случая, а не общее решение, как справиться с такого рода ошибками. Я также думал об установке или поиске этого файла символов, но я не понял, как.

Если кто-нибудь может мне помочь, мне нужно понять, в чем моя проблема и как я должен ее исправить.

Примечание: дамп ядра создается в /tmp не в текущем каталоге приложения

Комментарии:

1. Вы компилируете с -ggdb3 ? Обычно это приводит к созданию исполняемого файла с символом отладки, который требуется gdb. Вы также можете уменьшить оптимизацию, удалив -O3 или что-то подобное, чтобы более точно сопоставить сборку с вашим исходным кодом.

2. Я не знаю, как их добавить.. Я просто компилирую с помощью этой команды ./Application testcases/singlefailure.conf

3. К сожалению, это была моя ошибка, в которой не было указано местоположение файла приложения при запуске этого gdb -c core Application , он показывал часть моего кода, за исключением #1 представлений in malloc.c строк, и когда я использую up or list , он выдает то же самое. что это значит?

Ответ №1:

Я перешел по этой ссылке, и мне сказали загрузить эти символы

Не переходите по этой ссылке (это излишне сложно для вашего варианта использования).

Вместо этого сделайте это:

 gdb /path/to/my/binary
(gdb) run 
  

… GDB остановится, когда ваша программа столкнется SIGSEGV

 (gdb) bt     # should produce meaningful output now.
  

Комментарии:

1. Я не понимаю, к чему /path/to/my/binary относится, у меня нет этого каталога на моем компьютере. Это то, что я должен установить? и как мне это сделать? @EmployedRussian

2. /path/to/my/binary Это тот же путь, который вы использовали в symbol-file команде. Это путь к вашему двоичному файлу, тот, который вы запускаете, тот, который выходит из строя из-за ошибки сегментации.