告别Serial.println(),无需Atmel-ICE,通过GDB断点调试Arduino。

接线

连上USB即可。

IMG_20230104_214015

安装PlatformIO

参考这篇文章

左边栏小蚂蚁 -> Platforms -> Embedded -> Atmel AVR

新建项目

左边栏小蚂蚁 -> PIO Home -> New Project。

2023-01-04_22-16

src文件夹下新建main.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Arduino.h"
#include "avr8-stub.h"
#include "app_api.h" // only needed with flash breakpoints

void setup()
{
// initialize GDB stub
debug_init();
pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}

编辑platformio.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[platformio]
default_envs = megaatmega2560_debug

[env:megaatmega2560_debug]
platform = atmelavr
board = megaatmega2560
framework = arduino

debug_tool = avr-stub
debug_port = /dev/ttyACM0

; GDB stub implementation
lib_deps =
jdolinay/avr-debugger @ ~1.4

调试

打开src/main.c文件,在16行行号左边点一下添加断点。

F5(Run > Start Debugging)进入调试界面。

反复按F5(顶栏的Continue),可见到板载LED常亮,按一次灭一次。调试器工作正常。

2023-01-04_21-42

debug

新建项目卡在Please wait...

UI卡住无其他信息,建议用命令行模式初始化。可能还需设置代理。

2023-01-04_22-18

左边栏小蚂蚁 -> PlaformIO Core CLI

1
2
3
mkdir arduino-blink
cd arduino-blink
pio init -b megaatmega2560

开发板名称可以参考这里

无法进入debug模式

查看DEBUG CONSOLE。报错avr-gdb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory。系统安装libncurses5即可。

参考资料

Debugging » avr-stub

Source level debugger for Arduino