views:

2505

answers:

4

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.

+8  A: 

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.

Alnitak
The redirection seems to work but I get some errors.Failed to read a valid object file image from memory.Program exited with code 042.Any ideas?
vinc456
That's likely a general GDB error, and probably nothing to do with the fact you're running within emacs. Learn how to run GDB from a shell first (with a new question if necessary), and then worry about running it inside emacs.
Alnitak
I figured it out. For some reason I typed void main(int argc, char *argv[]) instead of "int main..." and it slipped my eye. Anyways everything works fine now; thanks for your help!
vinc456
+2  A: 

you can also do it like this:

% gdb myprogram
(gdb) set args arg0 arg1
(gdb) run
Nathan Fellman
+2  A: 

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

gdb gdbarg1 gdbarg2 --args yourprog arg1 arg2 -x arg3
vinc456
A: 

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.

Zitrax