J'essaie d'exécuter deux commandes à la fois dans gdb:
finish; next
J'ai essayé d'utiliser le ';' pour séparer les commandes mais gdb ne m'a pas laissé faire les deux à la fois.
Est-il possible de faire plusieurs commandes dans gdb similaires aux commandes bash séparées par ';' délimiteur?
Je ne le crois pas (mais je peux me tromper). Vous pouvez faire quelque chose comme ça:
(gdb) définir fn > terminer > suivant > fin
Et puis tapez simplement:
(gdb) fn
Vous pouvez mettre cela dans votre ~/.gdbinit
également, il est donc toujours disponible.
Si vous exécutez gdb à partir de la ligne de commande, vous pouvez passer plusieurs commandes avec le paramètre -ex comme:
$ gdb ./prog -ex 'b srcfile.c:90' -ex 'b somefunc' -ex 'r -p arg1 -q arg2'
Ceci, couplé à l'affichage et à d'autres commandes, rend l'exécution de gdb moins lourde.
GDB n'a pas un tel caractère de séparateur de commandes. J'ai regardé brièvement, au cas où il serait facile d'en ajouter un, mais malheureusement non ...
Vous pouvez le faire en utilisant l'intégration python dans gdb
.
Ce serait bien si s ; bt
Faisait un pas puis imprimait une trace, mais ce n'est pas le cas.
Vous pouvez accomplir la même chose en appelant l'interpréteur Python.
python import gdb ; print gdb.execute("s") ; print gdb.execute("bt")
Il est possible d'envelopper cela dans une commande dédiée, ici appelée "cmds", soutenue par une définition python.
Voici un exemple .gdbinit
Étendu avec une fonction pour exécuter plusieurs commandes.
# multiple commands
python
from __future__ import print_function
import gdb
class Cmds(gdb.Command):
"""run multiple commands separated by ';'"""
def __init__(self):
gdb.Command.__init__(
self,
"cmds",
gdb.COMMAND_DATA,
gdb.COMPLETE_SYMBOL,
True,
)
def invoke(self, arg, from_tty):
for fragment in arg.split(';'):
# from_tty is passed in from invoke.
# These commands should be considered interactive if the command
# that invoked them is interactive.
# to_string is false. We just want to write the output of the commands, not capture it.
gdb.execute(fragment, from_tty=from_tty, to_string=False)
print()
Cmds()
end
exemple d'appel:
$ gdb
(gdb) cmds echo hi ; echo bye
hi
bye
j'ai couru d'une autre manière pour faire plusieurs commandes dans GDB en utilisant un document Bash ICI.
exemple:
cat << EOF | gdb
print "command_1"
print "..."
print "command_n"
EOF
cela a une valeur/facilité d'utilisation IMO limitée car GDB se ferme après l'exécution de la liste des commandes.