Q:

How are operating systems debugged?

How are operating systems typically debugged?  They cannot be stepped through with a debugger like simple console programs, and the build times are too large to repeatedly make small changes and recompile the whole thing.

A:

They aren't debugged as a multi-gigabyte programs! :)
If you mean the individual user-mode components, they can mainly be debugged just like normal programs and libraries (because they are normal programs/libraries!).
For kernel-mode components, though, each OS has its own mechanism; here is some information regarding the way that we do kernel debugging in Windows. It can be done using the help of another machine connected to the machine you're debugging, via a serial port or something. I'm not familiar with the process itself, but that's the gist of how they work. (You need to set some boot loader options so that the system is ready for the debugger to be connected as early as possible.)

A:

It depends on which part of the operating system you're talking about.  When I worked at MSFT, I worked on the IE team.  We debugged IE and the shell (Windows Explorer) in Visual Studio and stepped through them line by line all day long.  Though, sometimes, it's easier to debug using a command line tool such as NTSD.
If, however, you want to debug anything in Kernel land such as the OS kernel or device drivers, which I suspect is really what you're asking, then you must use the Kernel debugger.  For Windows that is a command line tool called kd, and generally you run the debugger on one machine and remotely debug the target.

