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 ?

6voto

Johannes Points 2330

Si le --args ne fonctionne pas sur votre machine (c'est-à-dire sur Solaris 8), vous pouvez lancer gdb comme suit

gdb -ex "set args <arg 1> <arg 2> ... <arg n>"

Et vous pouvez combiner cela avec l'entrée d'un fichier dans stdin et "l'exécution immédiate" :

gdb -ex "set args <arg 1> <arg 2> ... <arg n> < <input file>" -ex "r"

6voto

alinsoar Points 3583

Beaucoup trop tard, mais voici une méthode qui fonctionne pendant gdb session.

gdb <executable>

entonces

(gdb) apropos argument

Cela renvoie de nombreuses correspondances, la plus utile est la suivante set args .

set args -- Set argument list to give program being debugged when it is started.

set args arg1 arg2 ...

entonces

r

Ceci va exécuter le programme, en passant à main(argc, argv) les arguments et le nombre d'arguments.

4voto

Austin_Anderson Points 496

Gdb a --init-command <somefile> où somefile contient une liste de commandes gdb à exécuter, j'utilise ceci pour avoir //GDB dans mon code, alors `

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

comme un script, qui place la commande pour charger les symboles de débogage, puis génère une liste de commandes de rupture pour placer un point d'arrêt pour chaque //GDB et le lance en exécutant

0voto

bit_pusher Points 31

Malheureusement, le fait d'avoir des args ne fait aucune différence lorsque PYTHONPATH est défini comme /usr/lib/python2.7.

export PYTHONPATH=/usr/lib/python2.7 gdb --args ls /tmp Erreur fatale Python : Py_Initialize : Impossible d'obtenir l'encodage de la locale Fichier "/usr/lib/python2.7/encodings/ init .py", ligne 123 raise CodecRegistryError,\c. ^ SyntaxError : syntaxe invalide Abandon (vidage du noyau)

0voto

Gdb --args executibleFileName arg1 arg2...

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