Vous pouvez le faire en utilisant l'intégration python dans gdb
.
Ce serait bien si s ; bt
et a ensuite imprimé un backtrace, mais ce n'est pas le cas.
Vous pouvez accomplir la même chose en faisant appel à l'interpréteur Python.
python import gdb ; print(gdb.execute("s")) ; print(gdb.execute("bt"))
Il est possible de regrouper tout cela dans une commande dédiée, appelée ici "cmds", soutenue par une définition python.
Voici un exemple .gdbinit
étendu avec une fonction permettant d'exécuter des commandes multiples.
# 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'invocation :
$ gdb
(gdb) cmds echo hi ; echo bye
hi
bye