I have a program and I am trying to debug it using gdb. Inside the program I have methods that require the user to enter an input using stdin. How can I enter this input when I am in gdb? So that I can trace how my methods work?
-
For the simpler case of direct input, the question is the same as this: stackoverflow.com/questions/455544 There are however cases which this does not cover: 1) you need to see stdout to decide stdin 2) actual timing and keypresses are needed like in ncurses. In those cases, maybe expect might do it: stackoverflow.com/questions/5579901/…Ciro Santilli OurBigBook.com– Ciro Santilli OurBigBook.com2015-06-10 17:48:34 +00:00Commented Jun 10, 2015 at 17:48
3 Answers
$ cat >foo <<EOF
something
EOF
$ gdb -quiet /bin/cat
Reading symbols from /bin/cat...(no debugging symbols found)...done.
Missing separate debuginfos, use: debuginfo-install coreutils-8.12-7.fc16.x86_64
(gdb) run <foo
Starting program: /bin/cat <foo
something
[Inferior 1 (process 22436) exited normally]
(gdb)
Comments
You can also run your program first, then attach GDB to it:
gdb --pid $(pgrep your_program)
This way you will be able to run your program interactively in a separate terminal.
Note: attaching GDB to another process might require using sudo or changing permissions.
4 Comments
-g flag is a.out. Should I run it using a.out some parameters. Then gdb --pid <id>? Or the `some parameters' will be entered in gdb?./a.out 0 1 map1.txt. I connect gdb just like I mentioned in previour comment. However, I was unable to debug the run executable.sudo gdb ..... Is there another way to make it possible without using sudo?ptrace_scope to 0 has security implications as any process will be able to attach itself to another process.I just went through something like this yesterday and recursed through a bunch of "help" commands in gdb because I couldn't find exactly what I needed on the Internet.
I used set variable *your_variable* = *your desired input* after I had started gdb and began running my code. Worked like a charm.
I know this is late, but maybe it'll help someone else.