#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
orlist
, он выдает то же самое. что это значит?
Ответ №1:
Я перешел по этой ссылке, и мне сказали загрузить эти символы
Не переходите по этой ссылке (это излишне сложно для вашего варианта использования).
Вместо этого сделайте это:
gdb /path/to/my/binary
(gdb) run
… GDB остановится, когда ваша программа столкнется SIGSEGV
(gdb) bt # should produce meaningful output now.
Комментарии:
1. Я не понимаю, к чему
/path/to/my/binary
относится, у меня нет этого каталога на моем компьютере. Это то, что я должен установить? и как мне это сделать? @EmployedRussian2.
/path/to/my/binary
Это тот же путь, который вы использовали вsymbol-file
команде. Это путь к вашему двоичному файлу, тот, который вы запускаете, тот, который выходит из строя из-за ошибки сегментации.