▲ 我的vim配置仓库: gitee,vim相关优先在gitee更新,博客vim专栏作为部分补充和使用说明
▲ 本文提供vimspector调试的一个示例,和keil的调试功能比当然还是有很大差距,不过简单的调试功能如单步、复位、运行这些都跑通了,编译,下载也可以,vim终于还是成为了IDE。。。
▲ linux上软件兼容性和配置要比windows好很多
▲ 其他废话(与本文无关,可以不看):想用neovim的,但windows下nvim-treesitter一旦安装c的语法高亮就会崩溃,连checkhealth都运行不了,还有些其他显示问题不清楚怎么解决,在不同电脑上尝试过很多次都是这样,无奈下又换回了gvim,还挺喜欢Astro Nvim这个配置的,有清楚为什么的小伙伴可以留言或私信。让子弹飞吧。。。。
文章目录
- 一、环境和依赖项
- 二、vimspector配置
- 演示
- 其他问题
- vscode调试配置
一、环境和依赖项
- gvim9.0+,一些依赖和安装可以参考我的仓库说明
- vimspector,在vim内安装调试器
:VimspectorInstall -enable-c
- 字体,推荐我仓库里面的
hack
字体,测试所有图标终端下都显示正常,并不是所有nerd font
字体都能正常显示大多图标集。。 - openocd,在使用vim调试前需要在终端打开一个硬件调试器连接,这里使用stlink,当然其他的如jlink/dap等都是支持的,具体使用也有不少内容,可以参考openocd文档。这里贴上一条命令参考(直接把配置文件拷到工程目录下了):
openocd -f stlink.cfg -c 'transport select hla_swd' -f stm32f1x.cfg
- arm-none-eabi-gcc,编译调试工具集
- makefile 工程,我使用stm32,makefile用cubeMX生成还是挺方便的。
- 其他
- openocd也是可以替换的,如stlink的st-util,和jlink的gdbserver,不过这样一些配置指令也要再适配
二、vimspector配置
- 在根目录创建.vimspector.json文件,内容如下,根据自己需要调整:
{"configurations": {"Launch STM32": {"adapter": "vscode-cpptools","configuration": {"type": "cppdbg","request": "launch","program": "${workspaceRoot}/build/f103.elf","cwd": "${workspaceRoot}","targetArchitecture":"arm","MImode": "gdb","stopOnEntry": true,"stopAtConnect":true,"MIDebuggerPath": "C:\\GreenSoft\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe","setupCommands":[{ "description":"connect","text": "target extended-remote :3333" },{ "description":"reset halt 0x08000000","text": "monitor reset"},{ "description":"init","text": "monitor reset init"}],"launchCompleteCommand": "exec-run","breakpointers": {"exception": {"cpp_throw": "Y","cpp_catch": "N"}}}},"Launch STM32 with loading elf": {"adapter": "vscode-cpptools","configuration": {"type": "cppdbg","request": "launch","program": "${workspaceRoot}/build/f103.elf","cwd": "${workspaceRoot}","targetArchitecture":"arm","MImode": "gdb","stopOnEntry": true,"stopAtConnect":true,"MIDebuggerPath": "C:\\GreenSoft\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe","setupCommands":[{ "description":"connect","text": "target extended-remote :3333" },{ "description":"reset halt 0x08000000","text": "monitor reset"},{ "description":"halt","text": "monitor halt"},{ "description":"load elf","text": "monitor program ./build/f103.elf"},{ "description":"reset","text": "monitor reset init"}],"launchCompleteCommand": "exec-run","breakpointers": {"exception": {"cpp_throw": "Y","cpp_catch": "N"}}}}}
}
vimspector提供了两套快捷键,使用自己喜欢的即可
let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
"let g:vimspector_enable_mappings = 'HUMAN'
enjoy~~
演示
-
终端打开openocd调试端口,支持多终端的插件,这里使用powershell:
-
编译
-
F5进入调试,选择配置,这里配置了1:直接调试,2:下载并调试。控制和下载命令参考openocd文档即可(
setupCommands
参数列表),出现异常可以尝试重开。。
-
首次进入的提示直接确认即可,是否都不影响,注意每次编译完需要重新上传elf文件
-
熟悉的调试界面,其实是支持鼠标操作的,下面也保留有命令行:
-
断点,并且停止时鼠标悬停会指示其值(断点时灵时不灵,暂不清楚原因。。):
-
代码提示补全
-
语法错误提示
-
符号导航
其他问题
- clangd警告消除:
- 提示硬件架构不支持FPU,在CFLAGS中加入编译指令
CFLAGS += -mfloat-abi=soft
(没有强迫症可不理会), 示例:
- 提示硬件架构不支持FPU,在CFLAGS中加入编译指令
- 优化等级调整,CFLAGS中配置,示例:
vscode调试配置
- 一个vscode调试配置,c/c++插件其实可以和vim共用compile_commands.json文件,必要配置只有这个,对比起来确实更简单。。。
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Cortex Debug","cwd": "${workspaceFolder}","executable": "./build/f103.elf","request": "launch","type": "cortex-debug","runToEntryPoint": "main","servertype": "openocd","configFiles": [//"./stlink.cfg","${env:openocdhome}/scripts/interface/stlink.cfg","${env:openocdhome}/scripts/target/stm32f1x.cfg"]}]
}