0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在vscode上用gcc征服debug过程中遇到的各种疑难杂症

Q4MP_gh_c472c21 来源:嵌入式ARM 作者:嵌入式ARM 2020-11-18 16:18 次阅读

1. PC上的IDE

都2020年了,听说你还在用vc++ 6.0,不,可能还到处搜索下载安装巨无霸一样的visual studio 2019来调试你“鸡碎咁多”的代码?都out了,这些不是过于庞大就是编译器老掉牙了。

为啥不用gcc呢?

gcc不是Linux里面的吗,能用在Windows?还能debug吗?

什么?你不知道Windows也可以用gcc?

好吧,我今天手把手教你用gcc,并且教你在vscode上用gcc征服debug过程中遇到的各种疑难杂症!

2. 安装MinGW

MinGW是什么东西,怎么安装?这里就不详述了,随便百度出来一堆。

不用管那么多,你知道它里面有个gcc就够了。至于安装,简单地说,可以从MinGW官方网站https://osdn.net/projects/mingw/releases/下载一个installer,直接默认安装,然后在类似以下界面选择要安装的包,例如GCC、GDB等。

更多的问题,其实是,国内的网络访问很慢。

如果不嫌弃,可以点击以下链接下载,直接解压到你喜欢的位置(免安装),然后配置环境变量即可。

链接:https://pan.baidu.com/s/11MIcqo5933NQlyKVeLon_w
提取码:gmp

然后呢,你就可以像在Linux里面那样愉快地玩耍了,当然,如果你是高手,你可以用命令行gdb来debug。

3. 在VSCode上debug

VSCode用过吧,也许是当下最流行的看代码神器之一了,关键是里面的插件用起来爽。那么,VSCode可以调试C代码吗?答案是必须的。

首先,你需要安装两个插件:C/C++、Code Runner

然后,我这里用一个这个公众号(嵌入式软件实战派)之前发的一个X-MACRO的例子代码(单个C文件)来做实验。

在下面的代码上面戳一个断点(行号左边那个红点),像这样:

接着,在菜单Run上面选择点击Start Debugging……

继续,点击C++(GDB/LLDB)

还有,点下图这个gcc.exe

呃呃

Wait,莫慌!这是我的电脑的问题,你的不一定有,我的电脑没装好.Net Framework。如果你的也是,戳这个错误提示框的“是”,跟着提示安装.Net即可。

其实,到这里,如果你能仿真,那就是成功了。

如果不行,看看这个,经过上面的操作,会生成以下配置文件:

"tasks": [ { "type": "shell", "label": "C/C++: gcc.exe build active file", "command": "D:MinGWingcc.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}${fileBasenameNoExtension}.exe" ],

以上这个“command”要配置成你的gcc路径。还有下面配置的这个“miDebuggerPath”是gdb的路径:

"version": "0.2.0", "configurations": [ { "name": "gcc.exe - 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "D:MinGWingdb.exe",

最后,如果成功了,就会像下面截图这样,左边的断点变成了一个黄色小图标:

这时,你就可以点击这些小箭头玩耍了,这是不是曾经熟悉的感觉?

同时,你还可以通过下面这个窗口看debug信息

还有output信息:

4. VSCode多文件debug

单个文件可以按上面的方法,但是,如果有多个C文件呢?这里折腾了我两个钟,现在我用两分钟教你少走弯路,我也把我遇到的“坑”标在这,你不要踩哦。

按以上提到的套路,直接点击debug,然后……

呃(⊙o⊙)…看看错误信息:

> Executing task: & 'D:Program FilesMinGWingcc.exe' -g 'd:vsdebugmain.c' -o 'd:vsdebugmain.exe' <    C:UsersxxxAppDataLocalTempccWm0Di0.o: In function `main':  d:/vsdebug/main.c undefined reference to `func_a'  d:/vsdebug/main.c undefined reference to `func_b'  collect2.exe: error: ld returned 1 exit status

(Note:这个例子是在另一个计算机上测试的,所以MinGW路径跟上面的不一样,请忽略这个细小差别。)

这错误信息它说没找到func_a和func_b,实际上,因为它类似地执行了:

gcc -e main.c -o main.exe

没有func_a.c和func_b.c两文件,当然,它也不知道有这两文件。我们来看看配置文件task.json

"tasks": [ { "type": "shell", "label": "C/C++: gcc.exe build active file", "command": "D:Program FilesMinGWingcc.exe", "args": [ "-g", "${file}", "-o", "${fileDirname}${fileBasenameNoExtension}.exe" ],

这里的args里面的东西是不是像gcc里面的命令参数?Bingo!

这个"${file}就是当前文件名,即你在vscode界面上看到的这个文件,然后你在其基础上点击了debug操作,它就识别到你想对它进行debug。但是它不知道你需要另外两个文件。于是,我们干脆手动添加所有需要编译的文件:

"tasks": [ { "type": "shell", "label": "C/C++: gcc.exe build active file", "command": "D:Program FilesMinGWingcc.exe", "args": [ "-g", "${file}", "${fileDirname}main.c", "${fileDirname}func_a.c", "${fileDirname}func_b.c", "-o", "${fileDirname}${fileBasenameNoExtension}.exe" ],

再来一发:

> Executing task: & 'D:Program FilesMinGWingcc.exe' -g 'd:vsdebugmain.c' 'd:vsdebugmain.c' 'd:ProjectsDocumentsAbout Emb docvsdebugfunc_a.c' 'd:vsdebugfunc_b.c' -o 'd:vsdebugmain.exe' <    C:UsersxxxAppDataLocalTempcc7Xdo6N.o: In function `main':  d:/vsdebug/main.c multiple definition of `main'

这两个函数对应的文件有了,但还是错了……你main的,重复了。想来想去,应该是这里重复了:

"${file}", "${fileDirname}main.c",

那就删掉一个,再来

呃呃……没完没了了。看错误信息:

gcc.exe: error: d:vsdebug.vscodemain.c: No such file or directory gcc.exe: error: d:vsdebug.vscodefunc_a.c: No such file or directory gcc.exe: error: d:vsdebug.vscodefunc_b.c: No such file or directory gcc.exe: fatal error: no input files

怎么多了一个“.vscode”?路径不对……噢,原来我是在task.json页面上点击的debug。

换一个页面再来:

丫丫的,终于可以玩耍了。

好了,如果你想系统地了解这些配置参数是啥子意思,那就戳这里:https://code.visualstudio.com/docs/editor/debugging#_launch-configurations

另外,左边的这几个视图分别可以查看当前局部变量、全局变量,函数调用关系等(跟其他IDE类似):

总结一下,遇到错误,别慌,看错误信息,很重要。

对于轻量级的仿真调试,以上VSCode的方法是非常好的,没必要安装庞大的Visual Studio 2019,gcc搞定所有。

责任编辑:xj

原文标题:手把手教你用VSCode调试仿真

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    4039

    浏览量

    133401
  • vscode
    +关注

    关注

    1

    文章

    154

    浏览量

    7664

原文标题:手把手教你用VSCode调试仿真

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AFE031AIRGZT使用过程中遇到的疑问求解

    使用到贵司AFE031AIRGZT芯片,使用过程中遇到如下问题: 1.使用afe031.pdf 和sboa130a.pdf文档中提到的电路连接,将芯片连接后,参考电压REF1为2.7v左右,而
    发表于 09-24 07:19

    测试工作的哎呀,当时怎么没有想到

    呢?但实际情况是,逃逸到线上的缺陷,疑难杂症式的极端异常的问题很少,大部分都不复杂且可以设计和开发规避,或者测试过程中被识别出来。针对
    的头像 发表于 09-06 09:45 205次阅读
    测试工作<b class='flag-5'>中</b>的哎呀,当时怎么没有想到

    使用VCA810过程中遇到的一些问题求解

    使用VCA810过程中遇到一些问题,请各位大神指点,具体如下: 1、控制电压最小只能加到-1.7V,再减小的话输出信号消失或者放大倍数骤然减小。 2、输入端出现一个叠加在信号
    发表于 08-30 07:11

    使用PSoC5LP的过程中,遇到PSoC5LPEFT干扰时复位的问题怎么解决?

    我使用 PSoC5LP 的过程中(>8 年),我曾多次验证测试遇到 PSoC5LP
    发表于 07-05 07:26

    VSCODE打开了OPENOCD ,可以进行DEBUG调试,如何查看寄存器的值?

    VSCODE 打开了 OPENOCD ,可以进行DEBUG 调试,但是如何查看 某个寄存器 的值呢。
    发表于 06-21 08:07

    VSCode编译过程cmake错误的原因?

    M2版macbook正确安装了ESP-IDF v5.1.2,并安装了VSCode插件,编译get-started的项目hello_world,利用idf.py build可以正确完成,但是
    发表于 06-06 06:48

    高低温交变湿热试验箱的疑难杂症怎么解决

    高低温交变湿热试验箱的是一种复合类试验箱,功能越多,越容易出现问题。比如在转换为高温试验时,温度的变化无法达到预期数值,一般情况下可以通过风循环系统进行排查。例如,温度达到目标数值所用时间较长,需要查看一下挡板是否正常运行;如果温度飙升,那么就是控制器有问题,及时处理,如更换控制仪表等。
    的头像 发表于 05-29 08:33 349次阅读
    高低温交变湿热试验箱的<b class='flag-5'>疑难杂症</b>怎么解决

    利用XMC1400启动套件的XMC_Debug消息功能总是遇到报错,为什么?

    我正在尝试利用 XMC1400 启动套件的 XMC_Debug 消息功能。 尽管用尽了关于这个问题的各种讨论主题中提供的所有解决方案,但似乎都无法解决这个问题。 以下是我的尝试
    发表于 05-24 06:18

    静电计有峰怎么处理?

    静电计是一种用于测量静电现象的电量、电压和电荷分布等参数的精密仪器。然而,实际使用过程中,静电计可能会遇到峰问题,即测量信号中出现不应
    的头像 发表于 05-20 17:05 513次阅读

    STM32的疑难杂症之一:Printf的使用

    一、Printf简介Printf是一个标准的C库API,用来打印信息显示的。Printf的底层输出调用,windows环境下是fputc函数,GNUC环境下是__io_putchar函数
    的头像 发表于 04-02 08:09 3309次阅读
    STM32的<b class='flag-5'>疑难杂症</b>之一:Printf的使用

    STM32编程疑难杂症

    疑难杂症
    的头像 发表于 03-28 23:29 416次阅读
    STM32编程<b class='flag-5'>疑难杂症</b>

    光学设计散光

    领域的发展进步。 散光指的是非设计需要的光线通过光学系统后到达像面,是对光学系统中非正常传输光的概括,最终像面形成不同类型的伪像。 设计光学系统的过程中为保证系统的正常运行,要尽
    的头像 发表于 02-22 06:34 401次阅读
    光学设计<b class='flag-5'>中</b>的<b class='flag-5'>杂</b>散光

    使用AD5293的过程中遇到的几个问题求解

    使用AD5293的过程中遇到了以下几个问题: 1.AD5293的VDD,VSS,VLOGIC引脚所连接的10uf的电容是有极性还是无极性的? 2.EXT_CAP引脚,在上电时对地电压应该是
    发表于 12-11 08:21

    使用AD4114过程中遇到的问题,请帮忙解答

    哈罗 使用AD4114的过程中遇到问题,请帮忙解答。多谢! 1.设置AD4114为Continuous Conversion Mode和Continuous Read Mode时,连续读回来通道数
    发表于 12-04 08:06

    罗盘为什么会出现Bad Compass Health

    pixhawk飞控疑难杂症解决方案
    发表于 11-27 09:38 0次下载