1. Printk, and system logs. Read the source code, imagine code running, combine the information of printing, speculate on the problem.
2. Nuclear modulator, such as KGDB.
3. User Mode Linux.
4. Debug on a virtual machine. For example, Bochs.