107

I'd like to have gdb immediately run the executable, as if I'd typed "run" (motivation: I dislike typing "run").

One way is to pipe the command to gdb like this:

$ echo run | gdb myApp

But the problem with this approach is that you lose interactivity with gdb, eg. if a breakpoint triggers or myApp crashes, gdb quits. This method is discussed here.

Looking at the options in --help, I don't see a way to do this, but perhaps I'm missing something.

orion elenzil
  • 3,643
  • 3
  • 31
  • 45

5 Answers5

148
gdb -ex run ./a.out

If you need to pass arguments to a.out:

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

EDIT: Orion says this doesn't work on Mac OSX.

The -ex flag has been available since GDB-6.4 (released in 2005), but OSX uses Apple's fork of GDB, and the latest XCode for Leopard contains GDB 6.3.50-20050815 (Apple version gdb-967), so you are out of luck.

Building current GDB-7.0.1 release is one possible solution. Just be sure to read this.

Community
  • 1
  • 1
Employed Russian
  • 182,696
  • 29
  • 267
  • 329
25

I would use a gdb-script:

gdb -x your-script

where your-script contains something like:

file a.out
b main
r

afterwards you have the normal interactive gdb prompt

EDIT:

here is an optimization for the truly lazy:

  1. save the script as .gdbinit in the working directory.
  2. Afterwards you simply run gdb as

    gdb

... and gdb automatically loads and executes the content of .gdbinit.

  • hey thanks for the answer. that looks like just what i want except i don't get the gdb prompt, i get gdb being suspended and i'm back at the command line as if i'd typed "ctrl-z". if i "fg", then gdb resumes and the app runs. this is OS X. – orion elenzil Jan 25 '10 at 21:48
  • orion: mmmh - that's surprising to me. Works well with every UNIX flavor I am actually using (Linux, Solaris, AIX). What gdb version you are using? –  Feb 08 '10 at 22:06
  • i just re-verfied the behaviour of this - still exits me to the command line w/ gdb suspended.GNU gdb 6.3.50-20050815 (Apple version gdb-1518) (Sat Feb 12 02:52:12 UTC 2011). – orion elenzil Jun 20 '11 at 05:17
  • @orionelenzil No idea why, but if you put `fg` after the `r` line, it acts sanely – dbr Dec 19 '12 at 10:08
  • The `start` command provides a shortcut for `b` + `r`: https://stackoverflow.com/a/2119606/895245 – Ciro Santilli Путлер Капут 六四事 Sep 23 '18 at 10:55
20
(echo r ; cat) | gdb a.out

The cat allows you keep typing after gdb breaks.

cadabra
  • 288
  • 2
  • 6
8

start command

This command is another good option:

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

It is like run, but also sets a temporary breakpoint at main and stops there.

This temporary breakpoint is deactivated once it is hit.

starti

There is also a related starti which starts the program and stops at the very first instruction instead, see also: Stopping at the first machine code instruction in GDB

Great when you are doing some low level stuff.

4

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

Darshana
  • 2,416
  • 6
  • 26
  • 50
Dan
  • 41
  • 2