web-dev-qa-db-fra.com

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

J'aimerais que gdb exécute immédiatement l'exécutable, comme si j'avais tapé "run" (motivation: je n'aime pas taper "run").

Une façon consiste à diriger la commande vers 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 d'arrêt se déclenche ou myApp plante, gdb se ferme. Cette méthode est discutée ici .

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

79
orion elenzil
gdb -ex run ./a.out

Si vous devez 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 le fork d'Apple de GDB, et le dernier XCode pour Leopard contient GDB 6.3.50-20050815 (Apple version gdb-967), vous êtes donc pas de chance.

Construire la version actuelle de GDB-7.0.1 Est une solution possible. N'oubliez pas de lire this .

115
Employed Russian

J'utiliserais un script gdb:

gdb -x your-script

votre-script contient quelque chose comme:

file a.out
b main
r

ensuite, vous avez l'invite gdb interactive normale

MODIFIER :

voici une optimisation pour les vraiment paresseux:

  1. enregistrez le script sous .gdbinit dans le working directory.
  2. Ensuite, vous exécutez simplement gdb as

    gdb

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

22
anon
(echo r ; cat) | gdb a.out

Le chat vous permet de continuer à taper après les pauses de gdb.

20
cadabra

start commande

Cette commande est une autre bonne option:

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

C'est comme exécuter, mais définit également un point d'arrêt temporaire à main et s'arrête là.

Ce point d'arrêt temporaire est désactivé une fois qu'il est atteint.

starti

Il existe également un starti connexe qui démarre 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

Idéal lorsque vous faites des trucs de bas niveau.

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

3
meth