104
votes

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.

5

5 Answers

144
votes
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.

25
votes

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.

20
votes
(echo r ; cat) | gdb a.out

The cat allows you keep typing after gdb breaks.

7
votes

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
votes

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