Say I have a two programs named blah and ret. I want to debug blah program which receives input from ret program via I/O redirection. How do I debug the blah program in the following case using gdb?
bash> ret | blah
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
At first, you may run the program and debug it by pid. This solution, of course, doesn’t cover all cases.
Another approach is to use Linux capabilities for inter-process communication. In short, you redirect the output of
retto a FIFO special file (“named pipe”) and then read from that FIFO via debugger. Here’s how it’s done. From bash, run:This creates a special file in your directory that will serve as a named pipe. When you write text to this file (using the same syntax
echo "Hello" >foo), the writing program will block until someone reads the data from the file (cat <foo, for instance). In our case, a gdb-controlled process will read from this file.After you created a fifo, run from bash:
Then, in gdb prompt, run
And get the desired effect. Note that you can’t read the data from the fifo (as well as from a usual pipe) twice: when you’ve read all the data, the
blahprocess dies and you should repeat the command writing to foo (you may do it from the other shell window).When you’re done, remove the fifo with
rm foo(or place it into the directory where it will automatically be removed upon system restart, such as/tmp).