How to automatically run the executable in GDB?
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 t开发者_JAVA技巧o 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.
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.
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:
- save the script as
.gdbinit
in theworking directory
. Afterwards you simply run gdb as
gdb
... and gdb automatically loads and executes the content of .gdbinit.
(echo r ; cat) | gdb a.out
The cat allows you keep typing after gdb breaks.
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.
gdb -x <(echo run) --args $program $args
精彩评论