2013-01-08 5 views
1

Je suis incapable d'aller de l'avant en obtenant de voir le noyau vidé.comment voir la faute de segmentation (core dumped)

J'ai quand je tapais

gdb normal_estimation core 


Reading symbols from /home/sai/Documents/pcl_learning/normal_estimation/build/normal_estimation...(no debugging symbols found)...done. 

warning: core file may not match specified executable file. 
[New LWP 11816] 

warning: Can't read pathname for load map: Input/output error. 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1". 
Core was generated by `./normal_estimation'. 
Program terminated with signal 11, Segmentation fault. 
#0 0xb53101d6 in free() from /lib/i386-linux-gnu/libc.so.6 
(gdb) 

S'il vous plaît laissez-moi savoir ce que dois-je faire?

+0

'aucun symbole de débogage trouvé': c'est un indice. Activez le débogage lors de la compilation de votre code (la désactivation des optimisations aide également beaucoup à déboguer). – vanza

+0

J'ai compilé le fichier en utilisant make. Comment puis-je donner des symboles de débogage? – Sai

+0

Non, vous avez compilé votre code en utilisant un compilateur (très probablement gcc). Lisez sa documentation pour savoir comment l'utiliser. – vanza

Répondre

3

Programme terminé avec le signal 11, Défaut de segmentation.
#0 0xb53101d6 in free() from /lib/i386-linux-gnu/libc.so.6

La première commande que vous devez apprendre est backtrace (ou son synonyme: where).

Cela vous indiquera quel code a appelé le free, qui s'est bloqué.

Toutefois, il est possible que ce code n'a rien à voir avec le problème réel: tout incident dans free est toujours causé par une corruption de tas de quelque sorte (libérer de la mémoire non allouée, libérer deux fois la même mémoire, écrire en mémoire qui a déjà été libéré, ou débordant un tampon alloué).

Les outils les plus utiles pour diagnostiquer la corruption de tas sur Linux sont Valgrind et AddressSanitizer. Les chances sont l'un de ces outils vous dira exactement ce que vous faites mal.

+0

Ceci est un rapport GDB. [Débogage de thread avec libthread_db activé] Utilisation de la bibliothèque de l'hôte libthread_db "/lib/i386-linux-gnu/libthread_db.so.1". Core a été généré par './normal_estimation '. Programme terminé avec le signal 11, Défaut de segmentation. # 0 0xb53101d6 dans _obstack_allocated_p (h = 0xb5498d18, obj = 0xbfe6ca90) à obstack.c: 341 obstack.c: Aucun fichier ou répertoire de ce type. (gdb) bt # 0 0xb53101d6 dans _obstack_allocated_p (h = 0xb5498d18, obj = 0xbfe6ca90) à obstack.c: 341 # 1 0xbfe6cab0 dans ??() # 2 0x08087c5c dans main() (gdb) – Sai

+0

J'ai essayé valgrind et il a donné ce résumé. SOMMAIRE D'ERREUR: 0 erreurs de 0 contextes (supprimées: 0 de 0) Instruction illégale (core dumped) – Sai

+0

encore une chose ... quand je vois sur le web, tous les programmes sont compilés en utilisant g ++ ou gcc mais ici j'ai un CMakeLists. txt et donc je fais cmake et ensuite faire. Donc, je ne suis pas capable d'utiliser correctement les ressources du web – Sai

Questions connexes