Introduction: Arduino Uno GDB Debugging
Sometimes you want to use the advantages of GDB Hardware debugging, but your hardware simply doesn't support it, which is the case with the Arduino Uno, and others like the ESP8266.
There are GDBStub libraries which can give you most of the capability of the hardware debugger, via the Serial interface.
For the Uno we can use the "avr-debugger by Jan Dolinay" for example.
Arduino Uno & USB Lead
Step 1: Setup Visual Micro
First ensure you have the project loaded you want to debug
Set the correct Board and COM port
Change the Debugger > Debug option to "Hardware"
Change the Debugger > Hardware debugger option to "GDB Stub"
Finally change the Optimisation setting to the recommended "No Project + Libraries Optimization"
Step 2: Installing the GDB Stub Library
To Install the GDBStub Code
- vMicro > Add Library > Download and Install Arduino Library > Manage Libraries Tab
- Enter "gdb" as the Search term
- For the Uno we can use the "avr-debugger by Jan Dolinay"
- Left click to install the library (see more about libraries here)
- Click the Rescan button at the top when the install has completed
- Now close the Visual Micro Explorer
Step 3: Adding the Code
To include the GDB stub we will need to add a few lines of code:
Include the avr8-stub.h
Add debug_init() to your setup() routine
Add breakpoint() to the top of loop()
Step 4: Add a Breakpoint
Add a break point to your sketch by clicking in the left hand margin.
You can add more than one, and up to 4
Step 5: Debugging
To start the debugging process, you can either:
- "Debug > Attach to Process" button if your code has already been uploaded to the board
- "Debug > Start Debugging" if your code has not been uploaded
Now you can debug in Visual Micro as normal on your Arduino Uno, without an external hardware debugger.
This can work with other GDB stub implementations for other boards, and advanced customisation of the IDE may be needed.
A GDBStub implementation for the ESP8266 has also been linked in Visual Micro, which can be seen here.
If you want to use your own Serial Code as well as GDBStub, see the follow up Instructable here