Comment puis-je interpréter un .stackdump fichier?
cette question est probablement une répétition de À l'aide d'un stackdump à partir de Cygwin exécutable - mais je suis un débutant, et je ne comprenais pas les réponses, ou même des parties de la question.
Je suis assez novice en c++ et de la programmation et je suis en développement dans NetBeans. Je suis en train de travailler sur un code qui compile très bien, mais échoue lors de l'exécution. Si j'utilise le débogueur, j'obtiens l'erreur suivante:
1 [main] all 6200 exception::handle: Exception: STATUS_ACCESS_VIOLATION
881 [main] all 6200 open_stackdumpfile: Dumping stack trace to all.exe.stackdump
J'ai réussi à trouver le fichier.exe.stackdump, et je peux le lire via notepad++, mais je ne comprends pas ce que cela signifie. Je recueillies par l'autre question, il y a un utilisateur de manière conviviale pour décoder ce fichier, mais je crois bash$ gdb all.exe.stackdump
a été inefficace. Quel est le meilleur moyen pour moi d'utiliser ce fichier de débogage?
Juste au cas où il est utile, voici le contenu de tous.exe.stackdump
Exception: STATUS_ACCESS_VIOLATION at eip=00434C41
eax=2003A2E4 ebx=0028A95C ecx=00000000 edx=0028A95C esi=0028A9B0 edi=00000000
ebp=0028A9C8 esp=0028A930 program=[redacted for privacy/security], pid 6200, thread main
cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame Function Args
0028A9C8 00434C41 (00000000, 2003A4F0, 0028A9E8, 00000000)
0028A9E8 00436B14 (00000000, 2003A4F0, 0028AA28, 0028D000)
0028AAF8 004036A4 (0028AB80, 2003A2B0, 00000014, 00000003)
0028ABD8 00403FBC (00000001, 0028AC00, 200280E8, 2003A189)
0028ACF8 61007535 (00000000, 0028CD78, 61006B20, 00000000)
End of stack trace
je suis en utilisant cygwin outils - gdb, etc. Je n'ai pas la moindre idée de ce que tu veux dire à propos des symboles de débogage.
stackoverflow.com/questions/7648642/...
OriginalL'auteur jlsecrest | 2012-10-16
Vous devez vous connecter pour publier un commentaire.
C'est un problème commun pour beaucoup de gars; et, habituellement, ils vous diront utiliser gdb. Cependant, ce n'est pas toujours une réponse raisonnable. Il ne faut pas re-compiler, car il n'est pas garanti que la construction de la nouvelle a même symbole les adresses comme la s'est écrasé.
Il existe plusieurs outils qui pourraient être utiles: objdump, addr2line, etc.
Vous pouvez le faire "objdump -D-S de construction.out > build.rasm.txt" et puis de recherche de ces adresses de fonctions entre le texte.
Addr2line est également un bon choix pour identifier les fonctions.
Si vous allez gérer ces problèmes de blocage souvent, il a suggéré d'écrire un outil de script pour aider votre travail.
Bonne chance.
OriginalL'auteur Hao
Vous pouvez utiliser la "Fonction" que les adresses d'arguments pour
addr2line
.addr2line -f -C -e main.exe 0xADD4355
Filtre à l'aide de awk et la pipe dans toutes les adresses:
awk '/^[0-9]/{print $2}' main.exe.stackdump | addr2line -f -C -e main.exe
Si vous voyez
??
's au lieu des noms de fonction, vous aurez besoin de reconstruire avec les symboles de débogage (-g
,-ggdb3
,...
)OriginalL'auteur assem
Une autre façon de trouver la ligne problématique serait d'utiliser gdb sur votre fichier binaire.
Afin de lancer gdb première:
gdb main.exe
À l'intérieur (gdb) run:
info line *0xADD4355
OriginalL'auteur djondal