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

VScode调试复杂C/C++项目

以前都是用的VScode调试c/cpp的单个文件的编译和执行, 但是一遇到大型项目一般就用gdb了, gdb的调试效率和VScode差距还是比较大的, 但最近发现VScode其实也能调试复杂的cpp项目, 所以记录一下.

首先明确一下几点:

  • 首先cpp文件需要经过编译, 生成可执行文件, 然后通过运行/调试可执行文件达到我们想要的效果
  • VScode中的task.json对应编译过程, launch.json对应调试过程
  • VScode中的Code Runner插件只能运行, 不能调试, 配置在settings.json中, 和以上两个文件是相对独立, 互不影响的关系

我们的复杂C++项目当然不是通过单文件编译获得, 而是多个文件相互调用, 链接之后编译形成的, 最后会生成一个可执行文件, 假设为main, (我使用的是Ubuntu, 可执行文件没有后缀名)

项目简易结构为:

|--build|--main
|--include|--头文件 
|--lib|--依赖库
|--src|--源代码
|--test|--测试文件

运行 

我们首先试着运行main, 建议使用VScode中的Code Runner插件, 基本上一家一个了, 不多说

打开它的插件主页往后翻, 就能看到的他的详细配置过程:

 具体配置在settings中:

"code-runner.executorMap": {"cpp": "cd $workspaceRoot/build && $workspaceRoot/build/main"},
"code-runner.defaultLanguage": "cpp",
"code-runner.saveFileBeforeRun": true,
"code-runner.runInTerminal": false,

这个配置不太常规, 因为我们要运行的只有main文件, 所以我设置了无论当前文件在哪, 都默认运行main文件

这样项目点击右上角的三角形, 选择run code, 就能跑起来了

调试

调试的话, 我们只需要launch.json文件就行了, 因为一般编译过程比较复杂, 我假装已经编译好了, 那么我们就不需要task.json文件, launch.json文件中也不不需要"preLaunchTask"(调试前在编译一次)

我们的launch.json如下:

{"version": "0.2.0","configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch","program": "${workspaceFolder}/build/main", // 要调试的只有main文件"args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "/usr/bin/gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true}],// "preLaunchTask": "build"}]
}

我们这个调试项目的名称叫"(gdb) Launch", 这样我们点击右上角的调试C/C++文件, 然后选择任务"(gdb) Launch", 就开始调试了!

VScode的自定义功能远比我要想的强大

http://www.lryc.cn/news/174170.html

相关文章:

  • 【Hash表】字母异位词分组-力扣 49 题
  • 展示日志log4.properties
  • 基于PLE结合卡尔曼滤波的RSSI定位算法matlab仿真
  • uniapp项目实践总结(十九)版本更新和热更新实现方法
  • 一起学数据结构(8)——二叉树中堆的代码实现
  • Linux环境变量配置说明(配置jdk为例-摘录自尚硅谷技术文档)
  • idea常用插件笔记
  • 搜索二叉树【C++】
  • 华为云云耀云服务器L实例评测|认识redis未授权访问漏洞 漏洞的部分复现 设置连接密码 redis其他命令学习
  • 快速安装NGINX
  • 一台电脑远程内网的另外一台电脑,禁止远程的电脑连接外网,只允许内网连接
  • 山西电力市场日前价格预测【2023-09-24】
  • MQ---第二篇
  • C++ 创建文件并写入内容
  • 微信小程序rich-text里面写多行溢出显示省略号在ios中不显示的问题
  • 解决Win11/10中Edge浏览器页面加载不出来、打不开问题|有网但是打不开,加载不了
  • 【DRAM存储器五】DRAM存储器的架构演进-part2
  • 分享一个基于uniapp+springboot技术开发的校园失物招领小程序(源码、lw、调试)
  • RabbitMQ工作模式——Routing路由模式
  • Python字典的增删改查以及嵌套
  • 【淘宝开店】新手入门开网店教程
  • 计网第五章(运输层)(五)(TCP拥塞控制)
  • windows/ubuntu怎么修改hosts文件
  • (日积月累版)大数据基础知识点1-关系型数据库
  • 【开心消消乐】python实现-附ChatGPT解析
  • springBoot源码汇总
  • 代码随想录二刷day39
  • Spring面试题7:面试官:Spring是如何进行异常处理的呢?
  • 华为云云耀云服务器L实例评测|搭建您的私人影院网站
  • Solidity 小白教程:22. Call