How do I run a program with commandline arguments using GDB within a Bash script?

GdbCommand Line-Arguments

Gdb Problem Overview


When running a program on GDB, usually, the arguments for the program are given at the run command. Is there a way to run the program using GDB and as well as give arguments within a shell script?

I saw an answer in a related question, mentioning that we can attach GDB to the program after the script starts executing. But then I will have to 'wait' the program.

Is there another way to do this?

Gdb Solutions


Solution 1 - Gdb

You can run gdb with --args parameter:

gdb --args executablename arg1 arg2 arg3

If you are doing this often (e.g. when running GDB from a script), you might want to consider the following arguments to automate things further. First, you can place your GDB commands (such as 'run') in a text file and provide the filename to the -x argument. Second, you can have GDB exit after running your commands by providing the --batch argument. A full example:

gdb -x commands.txt --batch --args executablename arg1 arg2 arg3

Solution 2 - Gdb

gdb -ex=r --args myprogram arg1 arg2

-ex=r is short for -ex=run and tells gdb to run your program immediately, rather than wait for you to type "run" at the prompt. Then --args says that everything that follows is the command and arguments, just as you'd normally type them at the commandline prompt.

Solution 3 - Gdb

Another way to do this, which I personally find slightly more convenient and intuitive (without having to remember the --args parameter), is to compile normally, and use r arg1 arg2 arg3 directly from within gdb, like so:

$ gcc -g *.c *.h
$ gdb ./a.out
(gdb) r arg1 arg2 arg3

Solution 4 - Gdb

You could create a file with context:

run arg1 arg2 arg3 etc

program input

And call gdb like

gdb prog < file

Solution 5 - Gdb

Much too late, but here is a method that works during gdb session.

> gdb <executable>

then

> (gdb) apropos argument

This will return lots of matches, the useful one is set args.

set args -- Set argument list to give program being debugged when it is started.

> set args arg1 arg2 ...

then

> r

This will run the program, passing to main(argc, argv) the arguments and the argument count.

Solution 6 - Gdb

If the --args parameter is not working on your machine (i.e. on Solaris 8), you may start gdb like

gdb -ex "set args <arg 1> <arg 2> ... <arg n>"

And you can combine this with inputting a file to stdin and "running immediatelly":

gdb -ex "set args <arg 1> <arg 2> ... <arg n> < <input file>" -ex "r"

Solution 7 - Gdb

In addition to the answer of Hugo Ideler. When using arguments having themself prefix like -- or -, I was not sure to conflict with gdb one.

It seems gdb takes all after args option as arguments for the program.

At first I wanted to be sure, I ran gdb with quotes around your args, it is removed at launch.

This works too, but optional:

gdb --args executablename "--arg1" "--arg2" "--arg3"

This doesn't work :

gdb --args executablename "--arg1" "--arg2" "--arg3" -tui

In that case, -tui is used as my program parameter not as gdb one.

Solution 8 - Gdb

gdb has --init-command <somefile> where somefile has a list of gdb commands to run, I use this to have //GDB comments in my code, then `

echo "file ./a.out" > run
grep -nrIH "//GDB"|
    sed "s/\(^[^:]\+:[^:]\+\):.*$/\1/g" |
    awk '{print "b" " " $1}'|
    grep -v $(echo $0|sed "s/.*\///g") >> run
gdb --init-command ./run -ex=r

as a script, which puts the command to load the debug symbols, and then generates a list of break commands to put a break point for each //GDB comment, and starts it running

Solution 9 - Gdb

If you want to pass arguments from file,
e.g. scanf from a file as input

try this

(gdb) run < the_file_contains_data

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondroxView Question on Stackoverflow
Solution 1 - GdbHugo IdelerView Answer on Stackoverflow
Solution 2 - GdbHugoView Answer on Stackoverflow
Solution 3 - Gdbaspiring_sargeView Answer on Stackoverflow
Solution 4 - GdbGeorge KastrinisView Answer on Stackoverflow
Solution 5 - GdbalinsoarView Answer on Stackoverflow
Solution 6 - GdbJohannesView Answer on Stackoverflow
Solution 7 - GdbSandburgView Answer on Stackoverflow
Solution 8 - GdbAustin_AndersonView Answer on Stackoverflow
Solution 9 - GdbgalianView Answer on Stackoverflow