This regression might have been around for a couple emacs versions. I don't recall when it started. Probably about the same time as the window management overhaul. Assuming that you are in the same directory as the included foo.c file... Compile the file with debugging support: gcc -ggdb -o foo foo.c Then start emacs: emacs -Q Split the frame into two windows: C-x 4 f foo.c RET Debugging sequence 1 M-x gdb RET RET (accepting default "gdb -i=me foo") start RET At this point, notice that *gud-foo* buffer is gone, as foo.c has replaced it. At some point in time in the past, foo.c would end up replacing the other window (the *scratch* buffer). That would be the desired behavior, as I would be able to continue using the *gud* buffer. C-x 4 b RET (accepting default "*gud-foo*") n RET RET Now *input/output of foo* replaced the *gud-foo* buffer. I can't say much about this, as I normally use gdb a different way. But it seems sub-optimal. For my usual debugging habits, see Sequence 2. Debugging sequence 2 Same set-up as for sequence 1, then as follows: M-x gud-gdb RET RET (accepting default "gdb --fullname foo") start RET At this point, notice that *gud-foo* buffer is gone, as foo.c has replaced it. At some point in time in the past, foo.c would end up replacing the other window (the *scratch* buffer). That would be the desired behavior, as I would be able to continue using the *gud* buffer. If need be, I can create a slightly more elaborate example containing more than one C file, and we can see *gud-foo* getting buried again as other C files pop up.