It is extremely difficult to debug hardware device drivers using only a
software debugger such as GDB because these debuggers provide no visibility
into what the hardware is actually doing. For example, if one neglects to
configure the clocks to a specific hardware peripheral, that peripheral will do
nothing in response to software commands even if all the peripheral specific
software is completely correct. Perhaps even more vexing is when the hardware
interface almost works. For example, in developing the I2C examples