L'interprétation des messages d'erreur de segmentation
Quelle est l'interprétation correcte de la suite à erreur de segmentation des messages?
segfault at 10 ip 00007f9bebcca90d sp 00007fffb62705f0 error 4 in libQtWebKit.so.4.5.2[7f9beb83a000+f6f000]
segfault at 10 ip 00007fa44d78890d sp 00007fff43f6b720 error 4 in libQtWebKit.so.4.5.2[7fa44d2f8000+f6f000]
segfault at 11 ip 00007f2b0022acee sp 00007fff368ea610 error 4 in libQtWebKit.so.4.5.2[7f2aff9f7000+f6f000]
segfault at 11 ip 00007f24b21adcee sp 00007fff7379ded0 error 4 in libQtWebKit.so.4.5.2[7f24b197a000+f6f000]
- double possible de stackoverflow.com/questions/2179403/...
Vous devez vous connecter pour publier un commentaire.
C'est une erreur due à la suite d'un pointeur null en essayant de trouver le code à exécuter (qui est, au cours d'une instruction fetch).
Si c'était un programme, pas une bibliothèque partagée
Exécuter
addr2line -e yourSegfaultingProgram 00007f9bebcca90d
(et répétez l'opération pour l'autre pointeur d'instruction valeurs) pour voir où est l'erreur qui se passe. Mieux, obtenir un debug-instrumentée de construire, et de reproduire le problème sous un débogueur tels que gdb.Puisque c'est une bibliothèque partagée
Vous êtes arrosé, malheureusement, il n'est pas possible de savoir où les bibliothèques ont été placés dans la mémoire par l'éditeur de liens dynamique après le fait. Reproduire le problème sous
gdb
.Ce que l'erreur signifie
Voici la liste des champs:
address
(après laat
) - l'emplacement en mémoire le code tente d'accès (il est probable que10
et11
sont les décalages à partir d'un pointeur, nous nous attendons à être fixé à une valeur valide, mais qui est plutôt pointant vers0
)ip
- pointeur d'instruction, c'est à dire. d'où le code qui est en train de faire cette viesp
- pointeur de pileerror
- Un code d'erreur pour les erreurs de page; voir ci-dessous ce que cela signifie sur x86.error
n'est pas la valeur deerrno
, mais une architecture de code d'erreur spécifique pour les défauts de page.7f9beb83a000
dans ce cas). Et même si ce n'était pas le cas, puisque l'adresse de base est la page aligné, il est généralement possible de faire un raisonnable conjecture instruite.Erreur 4 signifie "La cause était un utilisateur en mode de lecture, aucune page trouvée.". Il y a un outil qui décode ici.
Voici la définition du noyau. Gardez à l'esprit que 4 signifie que le bit 2 est et pas les autres bits sont définis. Si vous le convertir en binaire, cela devient clair.
Maintenant, alors que "la propriété intellectuelle 00007f9bebcca90d" signifie que le pointeur d'instruction a été à 0x00007f9bebcca90d lorsque l'erreur s'est passé.
"libQtWebKit.donc.4.5.2[7f9beb83a000+f6f000]" vous dit:
Si vous prenez l'adresse de base et de la soustraire de la propriété intellectuelle, vous obtenez le décalage dans l'objet:
Ensuite, vous pouvez exécuter addr2line sur elle:
Dans mon cas, il n'a pas réussi, soit l'exemplaire que j'ai installé n'est pas identique à la vôtre, ou il est dépouillé.
-fCi
option sur mon propre code défectueux et a claqué ce bug en moins d'une minute. Merci, une grande aide.Nous allons aller à la source -- 2.6.32, par exemple. Le message est imprimé par show_signal_msg() fonction dans arch/x86/mm/fault.c si le show_unhandled_signals sysctl est réglé.
"erreur" n'est pas un errno, ni un numéro de signal, c'est une "erreur de défaillance de page de code" -- voir la définition de enum x86_pf_error_code.
"[7fa44d2f8000+f6f000]" est l'adresse de départ et la taille de la mémoire virtuelle de la zone où l'objet concerné a été cartographiée au moment de l'accident. La valeur de la "propriété intellectuelle" devrait rentrer dans cette région. Avec cette information en main, il devrait être facile à trouver code incriminé dans gdb.