There is a whole range of methods throughout the history, from flashing lights on the console, to using hardware devices such as ICE, to more modern technologies using fairly standard debuggers. One of the methods that is more common among OS developers, then application developers is kernel dump analysis. Take a look at something like mdb on solaris for an idea of โโhow Solaris kernel developers do some debugging. Tracing technology is also used. Anywhere from fairly simple registration packages to more advanced technologies like dtrace.
Also note that the methods used depend on the software level. The initial download has a rather difficult place for your fingers to penetrate. But after that, the environment of modern operating systems more and more resembles setting up the application you are used to. In the end, this is all the code :)
Michael hunter
source share