2012-05-22 6 views
2

Je suis nouveau sur gdb. Quand je débogue mon programme, je n'ai que des backtraces comme ci-dessous.questions gdb concernant les symboles

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) 

Je suppose qu'il manque des informations sur les symboles. Je reçois ce message

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

donc j'ai essayé (gdb) symbole fichier /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.13.so au démarrage de gdb il n'a pas aidé.

Comment savoir quelle information de symbole est manquante? Le code de l'ensemble du projet est compilé avec gcc -g.

+0

Vous aurez probablement pas besoin des symboles de la bibliothèque standard C à moins que vous le débogage _it_ - les chances sont nettement plus élevés que les problèmes de 'SIGSEGV' sont dans le code de your. Etes-vous sûr que votre code n'est pas supprimé après sa compilation? ... D'autre part, # 4, il y a un pointeur nul. Peut-être que toute la pile est indésirable. – sarnold

+2

'gcc -g' devrait fonctionner. Assurez-vous que tout lien préserve également les symboles. –

Répondre

0

Ce problème peut se produire lorsque vous compilez l'application statiquement (-static dans gcc). Dans ce cas, les bibliothèques de la machine de construction peuvent être différentes des bibliothèques de la machine d'exécution et gdb ne peut pas trouver les symboles des bibliothèques de machine de construction.

J'ai eu ce problème et la seule solution qui a fonctionné pour moi était de construire l'application sur la même machine que celle exécutée.

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

Questions connexes