Comment exécuter automatiquement L'exécutable dans GDB?

j'aimerais avoir gdb immédiatement lancer l'exécutable, comme si j'avais tapé "exécuter" (motivation: je n'aime pas taper "exécuter").

une façon est de pipe la commande à gdb comme ceci:

$ echo run | gdb myApp

mais le problème avec cette approche est que vous perdez l'interactivité avec gdb , par exemple. si un point de rupture se déclenche ou myApp s'écrase, gdb cesse. Cette méthode est discutée ici .

en regardant les options dans --help , Je ne vois pas comment faire ça, mais peut-être que je manque quelque chose.

74
gdb

5 réponses

gdb -ex run ./a.out

si vous avez besoin de passer des arguments à a.out :

gdb -ex run --args ./a.out arg1 arg2 ...

EDIT: Orion dit que cela ne fonctionne pas sur Mac OSX.

le drapeau -ex est disponible depuis GDB-6.4 (sorti en 2005), mais OSX utilise la fourchette D'Apple de GDB, et le dernier XCode pour Leopard contient GDB 6.3.50-20050815 (Apple version gdb-967) , donc vous n'avez pas de chance.

Bâtiment actuel GDB-7.0.1 la libération est l'un solution possible. N'oubliez pas de lire ce .

105
répondu Employed Russian 2017-05-23 12:09:17

j'utiliserais un script gdb:

gdb -x your-script

votre script contient quelque chose comme:

file a.out
b main
r

après vous avez l'invite gdb interactive normale

MODIFIER :

voici une optimisation pour les vraiment paresseux:

  1. enregistrer le script comme .gdbinit dans le working directory .
  2. après vous lancez simplement gdb comme

    gdb

... et gdb charge et exécute automatiquement le contenu de .gdbinit.

22
répondu 2010-02-13 12:58:38
(echo r ; cat) | gdb a.out

le cat vous permet de continuer à taper après les pauses gdb.

20
répondu cadabra 2011-06-19 05:01:35

start commande

cette commande est une autre bonne option:

gdb -ex start --args ./a.out arg1 arg2

C'est comme courir, mais aussi un point d'arrêt temporaire à main et s'arrête là.

ce point de rupture temporaire est désactivé une fois qu'il est atteint.

starti

il y a aussi un starti qui commence le programme et s'arrête à la toute première instruction à la place, Voir aussi: arrêt à la première instruction de code machine dans GDB

super quand tu fais des trucs de bas niveau.

5

gdb -x <(echo run) --args $program $args

3
répondu meth 2012-06-13 07:47:29