Lors de l'exécution d'un programme sur GDB, généralement, les arguments du programme sont donnés à la run
commande. Existe-t-il un moyen d'exécuter le programme à l'aide de GDB et de fournir 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 alors je devrai «attendre» le programme.
Y a-t-il une autre façon de procéder?
Réponses:
Vous pouvez exécuter gdb avec le paramètre --args,
Si vous voulez qu'il s'exécute automatiquement, placez quelques commandes dans un fichier (par exemple 'run') et donnez-le comme argument: -x / tmp / cmds. En option, vous pouvez exécuter le mode -batch.
la source
man gdb
ne contient pas--args
, c'est pourquoi je ne l'ai pas trouvé.gdb --help
Est-ce que.info gdb
prochaine fois :-).info
. Si Google ou Stack Overflow cesse de fonctionner XDindex-search
). Essayezinfo gdb
:, puis «i», puis «--args». Cela vous y amènera.-ex=r
est l'abréviation de-ex=run
gdb et indique à gdb d'exécuter votre programme immédiatement, plutôt que d'attendre que vous tapiez "run" à l'invite. Dit ensuite--args
que tout ce qui suit est la commande et les arguments, tout comme vous les taperiez normalement à l'invite de ligne de commande.la source
-exe=r
très utile!Une autre façon de le faire, que je trouve personnellement un peu plus pratique et intuitive (sans avoir à se souvenir du
--args
paramètre), est de compiler normalement et d'utiliserr arg1 arg2 arg3
directement de l'intérieurgdb
, comme ceci:la source
Vous pouvez créer un fichier avec le contexte:
Et appelez gdb comme
la source
gdb a
--init-command <somefile>
où somefile a une liste de commandes gdb à exécuter, je l'utilise pour avoir des//GDB
commentaires dans mon code, puis `comme un script, qui place la commande pour charger les symboles de débogage, puis génère une liste de commandes d'arrêt pour mettre un point d'arrêt pour chaque
//GDB
commentaire, et le démarre en cours d'exécutionla source
Si le
--args
paramètre ne fonctionne pas sur votre machine (c'est-à-dire sur Solaris 8), vous pouvez démarrer gdb commeEt vous pouvez combiner cela avec la saisie d'un fichier dans stdin et "l'exécution immédiate":
la source
En plus de la réponse d'Hugo Ideler. Lors de l'utilisation d'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 toutes les
args
options after comme arguments pour le programme.Au début, je voulais être sûr, j'ai exécuté gdb avec des guillemets autour de vos arguments, il est supprimé au lancement.
Cela fonctionne aussi, mais en option:
Cela ne fonctionne pas:
Dans ce cas,
-tui
est utilisé comme paramètre de mon programme et non comme gdb one.la source
Beaucoup trop tard, mais voici une méthode qui fonctionne pendant la
gdb
session.puis
Cela retournera beaucoup de correspondances, l'utile est
set args
.puis
Cela exécutera le programme, en passant à main (argc, argv) les arguments et le nombre d'arguments.
la source