2012-05-22 5 views
2

Я новичок в gdb. Когда я отлаживаю свою программу, я получаю только обратные пути, как показано ниже.gdb вопросы относительно символов

Program received signal SIGSEGV, Segmentation fault. 
0x000000003075a238 in ??() 
(gdb) backtrace 
#0 0x000000003075a238 in ??() 
#1 0x00007fff72825da8 in ??() 
#2 0x0000000000000008 in ??() 
#3 0x000000003063c340 in ??() 
#4 0x0000000000000000 in ??() 
(gdb) 

Я думаю, что информация о символе отсутствует. Я получаю это сообщение

Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found). 

поэтому я попытался (GDB) символ-файл /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.13.so при запуске GDB это не помогло.

Как узнать, какая информация отсутствует? Код всего проекта скомпилирован с помощью gcc -g.

+0

Вы, вероятно, не нужны символы из стандартной библиотеки C, если вы не отладки _it_ - шансы значительно выше, что любые проблемы 'SIGSEGV' в _your_ коде. Вы уверены, что ваш код не удаляется после его компиляции? ... С другой стороны, # 4 есть нулевой указатель. Возможно, весь стек - это барахло. – sarnold

+2

'gcc -g' должен работать. Убедитесь, что любая ссылка также сохраняет символы. –

ответ

0

Эта проблема может возникнуть при статической установке приложения (-статическая в gcc). В этом случае библиотеки построителя могут отличаться от библиотек исполняющего устройства, а gdb не может найти символы библиотек сборки.

У меня была эта проблема, и единственным решением, которое сработало для меня, было создание приложения на той же машине, что и при выполнении.

См: GDB cannot show the stack and shows "#1 0x0000000000000000 in ??()"

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