web-dev-qa-db-fra.com

gdb dans une commande

Quand j'ai débogué un exécutable program avec des arguments arg1 arg2 avec gdb i Effectue la séquence suivante

gdb
file ./program
run arg1 arg2
bt
quit

Comment puis-je faire la même chose d'une ligne de commande dans le script shell?

6
Viesturs

Vous pouvez passer des commandes à GDB sur la ligne de commande avec option -ex. Vous devez répéter cela pour chaque commande. Cela peut être utile lorsque votre programme doit lire STDIN afin que vous ne souhaitiez pas rediriger. Par exemple, pour od -c

echo abc |
gdb -ex 'break main' -ex 'run -c' -ex bt -ex cont -ex quit  od

Donc, en particulier pour votre question, vous pouvez utiliser:

gdb -ex 'run arg1 arg2' -ex bt -ex quit ./program
11
meuh

Les commandes pourraient être alimentées sur une entrée standard:

#!/bin/sh
exec gdb -q <<EOF
file ./program
run arg1 arg2
bt
quit
EOF

Ou les commandes peuvent être placées dans afile et gdb fonctionnent avec gdb -batch -x afile, ou si vous détestez les nouvelles lignes (et le codeur de maintenance) avec une coque de fantaisie, vous pouvez tout faire sur une seule ligne (moyen d'exprimer la version Heredoc):

gdb -q <<< "file ./program"$'\n'run$'\n'...
5
thrig