As embedded applications become more widespread and complex, so does the need for sophisticated debugging tools. This tutorial provides a survey of debugging techniques and available technologies. Topics covered include on-chip debugging, Nexus, hardware breakpoints, trace buffers, profiling, data visualization, simulation and multi-core/multi-chip debugging.