当前位置: 首页 > web >正文

VSCode CMake Debug

Foreword

VSCode CMake Debug 嵌入式MCU有好几种方案

Cortex-Debug

image-20250227161012980

OpenOCD

https://elmagnifico.tech/2023/07/22/Vllink-DapLink-Debug/

OpenOCD,需要专门的调试工具,ST-Link或者这里的VLink,支持CMSIS-DAP的

增加而一个build做为前置任务,然后启动openodcd

tasks.json

{// See https://go.microsoft.com/fwlink/?LinkId=733558// for the documentation about the tasks.json format"version": "2.0.0","tasks": [{"label": "build","type": "shell","command": "make","args": [],"group": "build"},{"label": "download","type": "shell","command": "openocd","args": ["-f","cmsis-dap.cfg","-f","stm32h7x.cfg","-c","program build/stm32h7_demo.elf verify reset exit"],"group": "build"}]
}

launch.json 主要给openocd输入调试配置

{"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot}","executable": "./build/stm32h7_demo.elf","name": "Debug Microcontroller","request": "launch","type": "cortex-debug","showDevDebugOutput": false,"servertype": "openocd","configFiles": ["cmsis-dap.cfg","stm32h7x.cfg"]}]
}

顾名思义JLink需要配合JLink来使用

image-20250227114640546

需要注意JLink的对应路径也需要在环境变量里,否则可能调用不到

JLinkGDBServerCL.exe -singlerun -nogui -if swd -port 50000 -swoport 50001 -telnetport 50002 -device STM32H743VI

在VSCode里新建一个launch,主要是svd和elf路径,device填正确就行了

{"version": "0.2.0","configurations": [{"name": "Cortex Debug-jlink","cwd": "${workspaceRoot}/","executable": "${workspaceFolder}/build/bin/demo.elf","request": "launch","type": "cortex-debug","servertype": "jlink","device": "STM32H743VI","interface": "swd","runToEntryPoint": "main","showDevDebugTimestamps": true,"svdFile": "${workspaceRoot}/config/STM32H743.svd",// "preLaunchTask": "build",// "postDebugTask": "run"}]
}

通过VSCode这种方式调用,启动非常慢,和SES对比就拉跨

Embedded Tools

之前用过的一个插件

https://elmagnifico.tech/2022/03/15/Embedded-Software-Development-VS-VSC/

img

本质上还是调用gdb然后配合openocd来实现调试的

        {"name": "Launch","type": "cppdbg","request": "launch","cwd": "${workspaceFolder}","program": "${workspaceFolder}/build/app/mxchip_azure_iot.elf","MIMode": "gdb","miDebuggerPath": "arm-none-eabi-gdb","miDebuggerServerAddress": "localhost:3333","debugServerPath": "openocd","debugServerArgs": "-f board/stm32f4discovery.cfg","serverStarted": "Listening on port .* for gdb connections","filterStderr": true,"stopAtConnect": true,"hardwareBreakpoints": {"require": true,"limit": 6},"preLaunchTask": "Flash","svdPath": "${workspaceFolder}/STM32F412.svd"}

Ozone

跳过VSCode,直接使用专业的Ozone来调试

https://elmagnifico.tech/2023/12/07/SES-Ozone-FreeRTOS/

配合我自己写的调用程序,很小30k,自动找到Ozone的路径,然后调用对应的调试文件,如果没有的话会自动新建一个

同样的烧写我也用了自己的程序去调用jlink完成烧写,比调用第三方插件可控性高多了

新建一个task,对应还有输入选择模板,否则一个配置要写一个task,太繁杂了

{"version": "2.0.0","tasks": [{"label": "Debug","type": "shell","command": "${workspaceFolder}/Ozone/flash.exe","args": ["--o","--path","${input:debugPath}"],"group": {"kind": "build","isDefault": false},"problemMatcher": [],"options": {"env": {"DEBUG_PATH": "${input:debugPath}"}}}],"inputs": [{"id": "debugPath","type": "pickString","description": "Select the debug configuration","options": ["${workspaceFolder}/Ozone/test.jdebug","${workspaceFolder}/Ozone/test2.jdebug","${workspaceFolder}/Ozone/test3.jdebug","${workspaceFolder}/Ozone/test4.jdebug",],"default": "${workspaceFolder}/Ozone/test.jdebug"}      ]
}

Summary

总体来说VSCode的调试不是很好用,还是原生的更好一些。

总感觉VSCode这里给的接口实在是太多了,选择太多了,但是每个选择其实做的都一般,没做到极致的水平

这些插件更像是一个整合工具,然后再接入另外一个整合工具,层层套娃,最后糊了一个勉强能用的东西

Quote

https://blog.csdn.net/pyt1234567890/article/details/122522700

https://blog.csdn.net/xiaoyuanwuhui/article/details/128085237

https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/debug-launch.md

http://www.xdnf.cn/news/6451.html

相关文章:

  • 【docker】--数据卷挂载
  • Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术、支持中英文自定义编辑- 基于 C# 语言开发
  • 如何安全配置好CDN用于防止DDoS与Web攻击 ?
  • 全面解析机器学习与深度学习中的模型权重文件格式与应用场景
  • 解决 Antd 日期组件国际化失败或者 TypeError: clone.weekday is not a function 问题
  • VSCode CMake工作流
  • Java并发编程:synchronized机制
  • Redis--基础知识点--26--过期删除策略 与 淘汰策略
  • 聊聊redisson的lockWatchdogTimeout
  • AWS Elastic Beanstalk部署极简Spring工程(EB CLI失败版)
  • 基于OpenCV的人脸微笑检测实现
  • 乘法口诀练习神器
  • 富文本编辑器:链接功能
  • 基于 Python Requests + Pytest + Allure 构建接口自动化测试框架的最优实践
  • 编程日志5.8
  • 【测试】测试分类
  • WebRTC 通话原理:从协商到通信
  • Intellij报错:the file size(3.47M) exceeds configured limit (2.56MB)
  • websocket入门详解
  • 第28周——InceptionV1实现猴痘识别
  • 鸿蒙OSUniApp实现个性化的搜索框与搜索历史记录#三方框架 #Uniapp
  • STM32单片机内存分配详细讲解
  • Android Studio中Gradle 7.0上下项目配置及镜像修改
  • 游戏引擎学习第280天:精简化的流式实体sim
  • 毕设设计 | 管理系统图例
  • ET EntityRef EntityWeakRef 类分析
  • 基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案‌
  • VSTO(C#)Excel开发进阶2:操作图片 改变大小 滚动到可视区
  • 产品更新丨谷云科技 iPaaS 集成平台 V7.5 版本发布
  • [特殊字符] 苍穹外卖项目中的 WebSocket 实战:实现来单与催单提醒功能