The presentation walks through how to use the OpenOCD open source software to debug embedded systems on the hardware level via JTAG interface, allowing single stepping, setting breakpoints, inspecting register and memory contents and more, starting before the CPU even executes the first instruction. After an introduction to JTAG debugging we look at how to use OpenOCD both standalone for firmware flashing as well as together with the GDB GNU Debugger for convenient debugging of bootloaders or the Linux kernel. These tasks will be demonstrated, and the respective OpenOCD configuration details will be explained.The presentation targets intermediate-level developers who work on bootloaders, BSPs and kernel drivers, deeply embedded systems, and test and production engineers with an interest in using OpenOCD, which can allow unified tooling across all of development, testing and production.