@jviega gdb runs a program and attaches the programs stdin/stdout to an alternate set of tty's. This way `gdb` can be interacted with as well as the program `gdb` is debugging can be interacted with. So there is a set of stdin/stdout for interacting with gdb, and a set of stdin/stdout for interacting with the program/kernel/os/target. The situation can get even more interesting in that it is possible to do something like `ssh` into a remote machine and run `gdbserver` on the program "and" have the program stdin/stdout somewhere else, and then run a `gdb` client to control the `gdbserver`, this way you can do things like debug a binary on some remote target/architecture via the local host without dragging your entire testing framework onto the remote host.