As long as you are debugging one process at a time,
or even multiple programs in a pipeline,
I/O will probably not be confusing because there is only
one process reading from standard input or writing to standard output at a time.
However, if you are debugging several processes that are all doing I/O independently
it may not be easy to tell which message came from which program,
nor can you guarantee which program will receive the characters you type in
to standard input.
Using the debugger's redirection capability will help you keep the I/O straight.
The -r option (for redirection) to the create command
will tell debug to set up a pseudo-terminal for that program's I/O.
debug will tell you the name of the pseudo-terminal
and all I/O to or from the program will be labeled with that
name. For example, here are two programs, each writing to a different pseudo-terminal:
debug> create -r a New program a (process p1) created HALTED p1 [main in a.c] ... Program I/O redirected to pseudo-terminal pts3 debug> create -r b New program b (process p2) created HALTED p2 [...] ... Program I/O redirected to pseudo-terminal pts4 debug> run -p all pts3> output from program a pts4> output from program b pts4> more output Process p2 has exited Current process is now p1, program a pts3> more outputSimilarly, with the input command you can direct a string to a particular program if the program's I/O has been redirected to a pseudo-terminal. Here, cat echoes a string that was directed to it with the input command:
debug> create -r /usr/bin/cat Warning: No -g information in /usr/bin/cat New program cat (process p1) created HALTED p1 [...] ... Program I/O redirected to pseudo-terminal pts0 debug> run -b debug> input -r pts0 "this is an example" pts0> this is an exampleinput normally adds a newline to every string. You can suppress the newline with the -n option:
debug> input -n -r pts0 "this example " debug> input -r pts0 "is on one line" pts0> this example is on one lineSince the program is associated with one specific pseudo-terminal, input -p a.out or input -p p1 would also have the same effect. (You don't need either -p or -r if the input is going to the current program.) However, a pseudo-terminal may have more than one object associated with it. The I/O for all objects resulting from a single create command, and from all processes forked and exec'd from the original program, are directed to the same pseudo-terminal.
If you want the I/O for all created processes to be directed to pseudo-terminals, you can change the default behavior of the create command by setting the debugger variable %redir to yes.