Debugging programs often requires providing command-line arguments. While you can typically specify these arguments using the run
command within the GDB interactive debugger, it’s frequently necessary to automate this process when running GDB from a shell script. This tutorial explains several methods for passing arguments to a program being debugged by GDB, directly from the command line or within a script.
Method 1: Using --args
The simplest and most direct approach is to use the --args
option when invoking GDB. This tells GDB to pass the subsequent arguments directly to the program being debugged.
gdb --args ./your_program arg1 arg2 arg3
In this example, ./your_program
is the executable you want to debug, and arg1
, arg2
, and arg3
are the arguments that will be passed to its main
function. GDB will start, load the program, and then execute it with the specified arguments.
Method 2: Combining -x
and --args
for Automation
For more complex debugging scenarios, you might want to predefine a series of GDB commands in a file. The -x
option allows you to specify a file containing GDB commands to be executed automatically. You can combine this with --args
for a powerful automated debugging workflow.
-
Create a GDB command file (e.g.,
commands.txt
):run # Add other GDB commands here, if needed
-
Run GDB with the command file and arguments:
gdb -x commands.txt --args ./your_program arg1 arg2 arg3
This will execute the commands in
commands.txt
(in this case, justrun
) and then pass the argumentsarg1
,arg2
, andarg3
to your program. The--batch
option can be added to exit GDB automatically after the commands are executed, useful for scripting.
Method 3: Using -ex
for a Single Command
If you only need to run the program with arguments and don’t require a complex command file, the -ex
option provides a concise way to execute a single GDB command.
gdb -ex=r --args ./your_program arg1 arg2 arg3
-ex=r
is a shorthand for -ex=run
, telling GDB to execute the run
command immediately. The --args
option then follows, specifying the arguments for your program.
Method 4: Standard Input Redirection
Another approach, particularly useful when the program expects input from standard input, is to redirect a file containing the input to the program. This doesn’t directly pass arguments to main
, but it provides input for the program to process.
-
Create a file (e.g.,
input.txt
) with the desired input:This is the input for the program. Another line of input.
-
Run GDB and redirect the input file:
gdb ./your_program < input.txt
Within the GDB session, you can then use the
run
command to start the program, which will read input from the redirected file. This is different from passing command line arguments.
Important Considerations:
- Argument Parsing: The way your program parses arguments (using
argc
andargv
) remains the same regardless of how you pass them to GDB. - Complex Arguments: For arguments that contain spaces or special characters, properly quoting or escaping them is crucial. Use shell quoting rules to ensure that GDB receives the arguments as intended.
- Debugging Scripts: When automating debugging with scripts, error handling and output management become essential to ensure robustness and clarity. Use appropriate shell scripting techniques to handle potential errors and provide informative output.