Je fais du débogage au niveau de l'assemblage dans GDB. Existe-t-il un moyen pour que GDB me montre l'instruction d'assemblage actuelle de la même manière qu'elle affiche la ligne source actuelle? La sortie par défaut après chaque commande ressemble à ceci:
0x0001433f 990 Foo::bar(p);
Cela me donne l'adresse de l'instruction en cours, mais je dois continuer à me référer à la sortie de disassemble
pour voir quelle instruction j'exécute actuellement.
Réponses:
Vous pouvez passer à la mise en page d'assemblage dans GDB:
Voir ici pour plus d'informations. L'instruction d'assemblage actuelle sera affichée dans la fenêtre de l'assembleur.
la source
layout regs
tui reg vector
pour afficher les regs vectoriels au lieu des regs entiers. (Pas toujours très utilisable, cependant, car il ne vous permet pas de choisir seulement le.v8_int16
ou quelque chose, donc l'affichage est un gros désordre.) Voir le wiki de balises x86 pour un tutoriel rapide sur le débogage asm.si
), et quelle fonctionnalité inutile (fenêtre d'affichage qui n'affiche pas les informations nécessaires). Cela n'a aucun sens de voter pour cette réponse puisque vous n'êtes que le messager ...·layout src
pour voir le code source lors du débogage, et n'oubliez pas de quitter ce mode parCTRL+x+a
Tu peux faire
et chaque fois que GDB s'arrête, il affichera le démontage de l'instruction suivante.
GDB-7.0
prend également en chargeset disassemble-next-line on
, ce qui démontera toute la ligne suivante et vous donnera plus de contexte de démontage.la source
si
(mais pass
)?display/ni $pc
ici pour afficher desn
instructions, comme dans le commentaire de stackoverflow.com/a/1902906/129550La commande
peut être configuré pour fonctionner tout le temps en utilisant le mécanisme de configuration habituel.
la source
x/ni $pc
pour afficher les n instructions suivantes, ce qui est souvent très utile.Définition de l'option suivante:
Vous donnera des résultats qui ressemblent à ceci:
la source
Si vous voulez que les quelques instructions suivantes s'affichent automatiquement pendant que vous parcourez le programme, vous pouvez utiliser la commande d' affichage comme suit -
display /3i $pc
Ce qui précède affichera 3 instructions chaque fois qu'un point d'arrêt est atteint ou lorsque vous effectuez une seule étape du programme.
Plus de détails à l'entrée du blog ici .
la source
Tableau de bord GDB
https://github.com/cyrus-and/gdb-dashboard
Cette configuration GDB utilise l'API officielle GDB Python pour nous montrer ce que nous voulons chaque fois que GDB s'arrête après, par exemple
next
, un peu comme TUI.Cependant, j'ai trouvé que cette implémentation est une alternative plus robuste et configurable au mode GDB TUI intégré comme expliqué à: gdb split view with code
Par exemple, nous pouvons configurer GDB Dashboard pour afficher le désassemblage, la source, les registres et la pile avec:
Voici à quoi cela ressemble si vous activez toutes les vues disponibles à la place:
Questions connexes:
la source
À partir de gdb, appuyez sur
Ctrl
x
2
et l'écran se divisera en 3 parties.La première partie vous montrera le code normal dans un langage de haut niveau.
Second vous montrera l'assemblage équivalent et correspondant
instruction Pointer
.Third vous présentera l'
gdb
invite normale pour entrer des commandes.la source
Ctrl-X 2
, mais ça ressemble augdb -tui
mode, ce qui est génial.layout split
partir de l'invite gdb.Il existe une solution simple qui consiste à utiliser
stepi
, qui à tour de rôle avance d'une instruction asm et montre le code asm environnant.la source