615 votes

Comment exécuter un programme avec des arguments en ligne de commande en utilisant GDB dans un script Bash ?

Lors de l'exécution d'un programme sur GDB, en général, les arguments du programme sont donnés dans le champ run commande. Existe-t-il un moyen d'exécuter le programme en utilisant GDB ainsi que de donner des arguments dans un script shell ?

J'ai vu une réponse dans une question connexe, mentionnant que nous pouvons attacher GDB au programme après que le script commence à s'exécuter. Mais dans ce cas, je devrai " attendre " le programme.

Y a-t-il un autre moyen de procéder ?

883voto

Hugo Ideler Points 774

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-lui comme argument : -x /tmp/cmds. Optionnellement, vous pouvez exécuter avec le mode -batch.

gdb -batch -x /tmp/cmds --args executablename arg1 arg2 arg3

84 votes

Argg, man gdb ne contient pas --args c'est pourquoi je ne l'ai pas trouvé. gdb --help fait.

8 votes

@CiroSantilli GDB est GNU. Pour consulter la documentation complète des outils GNU, pensez à utiliser info gdb la prochaine fois :-).

8 votes

@Apteryx peut-être qu'un jour j'apprendrai info . Si Google ou Stack Overflow ne fonctionnent plus XD

212voto

Hugo Points 81
gdb -ex=r --args myprogram arg1 arg2

-ex=r est le diminutif de -ex=run et indique à gdb d'exécuter votre programme immédiatement, plutôt que d'attendre que vous tapiez "run" à l'invite. Ensuite, --args indique que tout ce qui suit est la commande et les arguments, tels que vous les tapez normalement à l'invite de la ligne de commande.

5 votes

Je ne savais pas pour le -exe=r très utile !

0 votes

@Hugo super ! Merci. Utile !

0 votes

Je vois, vous ne pouvez pas faire gdb --args -ex=r myprogram arg1 arg2 .

86voto

aspiring_sarge Points 466

Une autre façon de procéder, que je trouve personnellement un peu plus pratique et intuitive (sans avoir à se souvenir de l'identifiant --args ), est de compiler normalement, et d'utiliser le paramètre r arg1 arg2 arg3 directement de l'intérieur gdb comme ça :

$ gcc -g *.c *.h
$ gdb ./a.out
(gdb) r arg1 arg2 arg3

20voto

George Kastrinis Points 2209

Vous pourriez créer un fichier avec le contexte :

run arg1 arg2 arg3 etc

program input

Et appelez gdb comme

gdb prog < file

6voto

Sandburg Points 411

En plus de la réponse de Hugo Ideler. Lorsque l'on utilise des arguments ayant leur propre préfixe comme -- o - Je n'étais pas sûr d'être en conflit avec celui de gdb.

Il semble que gdb prenne tout après args comme arguments pour le programme.

Au début, je voulais être sûr, j'ai lancé gdb avec des guillemets autour de vos args, il est supprimé au lancement.

Cela fonctionne aussi, mais c'est 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 mon programme et non comme paramètre de gdb.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X