我最近购买了STMicroelectronics NUCLEO-F446ZE,并且尝试使用Visual Studio代码建立构建和调试环境,并使用mbed Framework进行构建。
我所做的事情:
我已经为Windows中的make设置了MSYS。
我已经下载了gcc-avr-none-eabi工具链
我已经使用mbed在线工具建立了一个mbed项目,并下载了该项目供make使用。
我已经更新了主板上的ST-Link固件
我已经为Windows安装了USB驱动程序
我已经安装了ST-Link-Server
我已经为cortex debug安装了vscode扩展名
这是我尝试调试的简单代码(对于测试,它工作正常)
#include "mbed.h"
DigitalOut myled(LED1);
int main()
{
while (1)
{
myled = 1; // LED is ON
wait(0.2); // 200 ms
myled = 0; // LED is OFF
wait(0.2); // 200 ms
myled = 1; // LED is ON
wait(0.2); // 200 ms
myled = 0; // LED is ON
wait(1.0); // 1 sec
}
}
在我完成所有这些工作之后,几乎所有东西都起作用了!我可以构建,可以刷新,甚至可以调试,但是cpp符号似乎不匹配。
我的某些断点根本没有命中,而其他断点则使程序在所需行的上方或下方停了一行。我无法在“监视”面板中读取任何变量,也没有反汇编信息。
Here is a link to a gif同时显示:一个断点被忽略,另一个断点停在错误的行。
如果我按F10键越过一条指令,突出显示的行有时会向后移动。
我真的不知道该如何解决这种令人讨厌的行为。 我认为我在调试笔记本电脑(使用MingW)本地运行的“常规” c ++代码时遇到了类似的问题。因此,也许这与嵌入式开发无关,但是vscode中是否存在一般的c ++问题?
编辑:
当执行在错误的行中停止时,调试控制台实际上会说:
Breakpoint 1, main () at ../main.cpp:12
12 wait(0.2); // 200 ms
但是我在编辑器的第11行而不是第12行中设置了一个断点。:(