Comment puis-je exécuter un programme avec des args de ligne de commande en utilisant gdb dans un script bash?
Lors de l'exécution d'un programme sur gdb, généralement, les arguments du programme sont donnés à la commande run
. Existe-t-il un moyen d'exécuter le programme en utilisant gdb et de donner des arguments dans un script shell?
J'ai vu une réponse dans une question connexe, mentionnant que nous pouvons attacher le gdb au programme après que le script commence à s'exécuter. Mais alors je vais devoir attendre que le programme.
Je suis curieux de savoir s'il existe un autre moyen de le faire.
6 réponses
Vous pouvez exécuter gdb avec le paramètre -- args,
gdb --args executablename arg1 arg2 arg3
Si vous voulez qu'il s'exécute automatiquement, placez quelques commandes dans un fichier (par exemple 'run') et donnez - le en argument: - x / tmp / cmds. Optionnellement, vous pouvez exécuter avec le mode batch.
gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3
gdb -ex=r --args myprogram arg1 arg2
-ex=r
est l'abréviation de -ex=run
et dit gdb pour exécuter votre programme immédiatement, plutôt que d'attendre que vous tapez "exécuter" à l'invite. Alors --args
dit que tout ce qui suit est la commande et les arguments, comme vous les Tapez normalement à l'invite de la ligne de commande.
Une autre façon de le faire, que je trouve personnellement un peu plus pratique et intuitive (sans avoir à se souvenir du paramètre --args), est de compiler normalement, et d'utiliser r arg1 arg2 arg3
directement depuis gdb, comme ceci:
gcc -g *.c *.h
gdb ./a.out
(gdb) r arg1 arh2 arg3
Vous pouvez créer un fichier avec le contexte:
run arg1 arg2 arg3 etc
program input
Et appelez gdb comme
gdb prog < file
Gdb a --init-command <somefile>
où unfichier est une liste de gdb commandes à exécuter, je l'utilise pour avoir //GDB
commentaires dans mon code, puis `
echo "file ./a.out" > run
grep -nrIH "//GDB"|
sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
awk '{print "b" " " $1}'|
grep -v $(echo $0|sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r
En tant que script, qui met la commande pour charger les symboles de débogage, puis génère une liste de commandes de rupture pour mettre un point d'arrêt pour chaque commentaire //GDB
, et le démarre en cours d'exécution
Un ajout à la réponse de Hugo Ideler.
En utilisant des arguments ayant eux-mêmes le préfixe comme --
ou -
, Je n'étais pas sûr d'entrer en conflit avec gdb one.
Il semble que gdb prenne tout après l'option args
comme arguments pour le programme.
Au début, je voulais être sûr, j'ai couru gdb avec des guillemets autour de vos arguments, il est supprimé au lancement.
Cela fonctionne aussi, mais facultatif:
gdb --args executablename "--arg1" "--arg2" "--arg3"
, Cela ne fonctionne pas :
gdb --args executablename "--arg1" "--arg2" "--arg3" -tui
Dans ce cas, -tui
est utilisé comme paramètre de programme non comme gdb un.