How to load program reading stdin and taking parameters in gdb?

EmacsGdbRedirectCommand Line-Arguments

Emacs Problem Overview


> I have a program that takes input from > stdin and also takes some parameters > from command line. It looks like this: > > cat input.txt > myprogram -path "/home/user/work" > > I try to debug the code with gdb > inside emacs, by M-x gdb, I try to > load the program with the command: > > gdb cat input.txt > myprogram -path "/home/user/work" > > However, gdb does not like it.

Question cribbed from here. Unfortunately I don't understand the solution and am not sure what to do beyond compiling with the -g option and running the command M-x gdb.

Emacs Solutions


Solution 1 - Emacs

If you were doing it from a shell you'd do it like this:

% gdb myprogram
gdb> run params ... < input.txt

This seems to work within emacs too.

Solution 2 - Emacs

There are several ways to do it:

$ gdb myprogram
(gdb) r -path /home/user/work < input.txt

or

$ gdb myprogram
(gdb) set args -path /home/user/work < input.txt
(gdb) r

or

$ gdb -ex 'set args -path /home/user/work < input.txt' myprogram
(gdb) r

where the gdb run command (r) uses by default the arguments as set previously with set args.

Solution 3 - Emacs

For completeness' sake upon starting a debugging session there is also the --args option. ie)

gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3

Solution 4 - Emacs

This is eleven years later, and this question has an answer already, but for someone just like me in the future, I just wanted to add some thing.

After you run gdb your_program, if you just type run < file_containing_input, the program will just run till the end, and you might not catch the problem, so before you do run < file_containing_input do a break. Something like this

$ gdb your_program
gdb> break main
gdb> run < file_containing_input

Solution 5 - Emacs

And if you do not need to debug from the very beginning you can also attach to an already running process by using:

$ gdb myprogram xxx

where xxx is the process id. Then you do not need to tell gdb the starting arguments.

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
Questionvinc456View Question on Stackoverflow
Solution 1 - EmacsAlnitakView Answer on Stackoverflow
Solution 2 - EmacsmaxschlepzigView Answer on Stackoverflow
Solution 3 - Emacsvinc456View Answer on Stackoverflow
Solution 4 - EmacsEHMView Answer on Stackoverflow
Solution 5 - EmacsZitraxView Answer on Stackoverflow