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.

271
demandé sur Vadim Kotov 2011-05-25 11:42:00

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
376
répondu Hugo Ideler 2018-04-24 13:22:19
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.

82
répondu Hugo 2015-05-16 13:52:05

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
25
répondu aspiring_sarge 2015-04-20 07:19:03

Vous pouvez créer un fichier avec le contexte:

run arg1 arg2 arg3 etc

program input

Et appelez gdb comme

gdb prog < file
8
répondu George Kastrinis 2018-03-21 16:06:31

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

1
répondu Austin_Anderson 2017-08-02 01:25:29

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.

0
répondu Sandburg 2018-03-23 10:19:02