Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码

2023-05-16

前言

最近想要切换编辑工具,之前工作中使用过 Source Insight,Eclipse,CLion 来写 C++ 代码。目前来说 Source Insight 已经非常古老,只有编写代码还说得过去,编译、调试方面都不行。Eclipse 使用的时间最长,相对来说也比较好用,但是对于 C++11 之后的 C++ 代码实际上支持的并不友好。CLion 是相当棒的编辑工具,但是收费。

相对折中一下 VS Code 是一个比较不错的选择,并且周围很多同事和朋友都在用。本来想在网上找找使用 VS Code 写 C++ 代码的资料,找来找去都非常凌乱,因此在这里我希望自己整理一份使用说明文档。

PC 版本说明

由于我是在 macbook 上安装的,所以这里仅介绍在 macbook 上的使用方法。我的 macbook 版本是12.5

前期准备

安装 brew

我很多工具都是通过 brew 安装的,因此需要在电脑上先安装 brew,关于如何安装 brew 在这里就不做介绍了。安装方法很简单,只是需要等比较长的时间。

安装 VS Code

https://code.visualstudio.com/

在这个地址可以下载最新版本的 VS Code,我下载的压缩包是 VSCode-darwin-universal.zip(我安装的版本是 1.74.3),双击 zip 之后会解压出一个带有 Visual Studio Code 图标的目录,把这个目录剪切到 “应用程序” 就完成安装了。

双击打开 VS Code,看到的是空空如也。

安装插件

安装中文包

在安装 C++ 插件之前可以先安装中文包,对于英文不太熟练的朋友,这个中文包可能会有些帮助。

然后就是使用中文包,使用方法在插件的说明文档中有介绍。

按照描述操作就可以了。设置完语言之后会有提示框要求重启。

安装 C++ 编辑器

C++ 编辑器应该有很多种选择,我还是按照网上查到的文档,安装一个 C++ 编辑器

根据插件的说明,这个插件不包含编译和调试的工具,因此编译和调试工具需要自己安装。macbook 的编译和调试工具我记得是自带的,如果某位朋友电脑上本身没有,那只能找找相应的文档了。

安装 CMake

我参考的文档介绍可以使用 Code Runner 插件,我对这个插件没研究明白。不过在我看来 Code Runner 可能写个代码玩玩还可以,但是真正用在项目上估计比较难。在这里我目前比较推荐使用 CMake 进行编译和调试

在 PC 上安装 CMake

brew install cmake

安装后会在 /opt/homebrew/bin/cmake 目录

然后可以执行一下

cmake --version

如果找不到 cmake 可以尝试执行

/opt/homebrew/bin/cmake --version

如果只能在 /opt/homebrew/bin/cmake --version 执行成功,则需要在 VS Code 中调整一下 CMake 路径,如下图:

在 VS Code 中安装 CMake 插件

编辑、编译和调试代码

建立一个 C++ Demo

我创建的是 demo_c++ 目录,然后在里面建立了 3 个文件。

main.cpp

#include <iostream>
#include "Test.h"

int main() {
    std::cout << "hello, i'm main" << std::endl;
    Test t;
    t.print();
    return 0;
}

Test.h

#ifndef _TEST_H_
#define _TEST_H_
class Test {
public:
    Test();
    ~Test();
    void print();
};
#endif

Test.cpp

#include <iostream>
#include "Test.h"

Test::Test() {
}
Test::~Test() {
}
void Test::print() {
    std::cout << "i'm class test" << std::endl;
}

建立 CMakeLists.txt 文件

按照 CMake Tools quick start 的描述,在使用 ⇧⌘P 之后,输入:CMake: Quick Start,然后再输入执行文件的名字,我这里输入的是 demo_c++。

然后选择创建可执行程序,于是会自动创建 CMakeLists.txt,并且会显示如下日志:

PS:在 CMake Tools 里面可以配置 CMake 的一些内容,感兴趣的朋友可以再仔细研究一下。

手工添加 cpp 文件

由于我们的 demo 是两个 cpp 文件,而 CMake 自动创建的 list 仅包含 1 个 cpp,所以额外的 cpp 文件需要手工添加一下,如下图:

用 CMake 编译

在创建了 CMake 之后我们会发现 VS Code 最下面一行会发生变化

通过点击这里的 Build 就可以编译了

点击 build 之后,我们会看到编译出来的可执行文件:demo_c++

用 CMake 运行

点击上图的符号就可以运行,对于 demo 程序会在 terminal 中输出:

hello, i'm main
i'm class test

用 CMake 调试

在代码里随便找一行设置断点,然后点下面的小甲虫。然后就报错了

在这里我点了取消,先看看错误信息是什么

Starting: "/Library/Developer/CommandLineTools/usr/bin/lldb" --interpreter=mi
error: unknown option: --interpreter=mi
Use 'lldb --help' for a complete list of options.
"/Library/Developer/CommandLineTools/usr/bin/lldb" exited with code 1 (0x1).

错误处理

上面的信息是 /Library/Developer/CommandLineTools/usr/bin/lldb 这个命令不支持 --interpreter=mi 这个参数。这里很容易被弹出提示“打开 launch.json” 误导。

这里需要了解的关键点在与 lldb 和 lldb-mi 的差异。在文档中明确描述需要使用 lldb-mi

这里获取到了一个关键路径 ~/.vscode/,以及关键字段 miDebuggerPath

先在 ~/.vscode/ 找到 lldb-mi,我的路径是:

~/.vscode/extensions/ms-vscode.cpptools-1.13.9-darwin-arm64/debugAdapters/lldb-mi/bin/lldb-mi

然后,我们因为是使用 CMake 来调试,而 CMake 并不会加载 launch.json,所以不能在 launch.json 里面做文章。还是要看工具自身的配置,在里面找到了这个。

点一下 Cmake: Debug Config 中的 settings.json,出现了如下图的内容

在这里可以输入 miDebuggerPath 然后保存,我这里的配置如下:

{
    "cmake.cmakePath": "/opt/homebrew/bin/cmake",
    "cmake.debugConfig": {
        "miDebuggerPath": "<当前账户绝对路径>/.vscode/extensions/ms-vscode.cpptools-1.13.9-darwin-arm64/debugAdapters/lldb-mi/bin/lldb-mi"
    }
}

然后再点击小甲虫,就可以正常调试了。

除了点击按钮之外,还可以在调试控制台输入命令调试。(只是输入命令比较麻烦,需要先输入 -exec 再输入其他命令才可以)

参考资料

http://www.360doc.com/content/22/0420/00/277688_1027337827.shtml

https://blog.csdn.net/henry_23/article/details/120998555

https://code.visualstudio.com/docs/cpp/launch-json-reference

https://code.visualstudio.com/docs/cpp/CMake-linux

https://code.visualstudio.com/docs/editor/debugging#_launch-configurations

https://code.visualstudio.com/docs/cpp/lldb-mi

https://code.visualstudio.com/docs/cpp/cpp-debug

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码 的相关文章

  • 系统间通信3:RPC的基本概念

    本文引用 https yinwj blog csdn net article details 49453303 1 概述 经过了详细的信息格式 网络IO模型的讲解 xff0c 并且通过JAVA RMI的讲解进行了预热 从这篇文章开始我们将进

随机推荐

  • 系统间通信4:基本IO通信模型

    本文引用 https blog csdn net yinwenjie article details 48472237 目前常用的IO通信模型包括四种 xff1a 阻塞式同步IO 非阻塞式同步IO 多路复用IO和真正的异步IO 所有IO模式
  • 深入理解Golang中的Context包

    context Context是Go语言中独特的设计 xff0c 在其他编程语言中我们很少见到类似的概念 context Context深度支持Golang的高并发 1 Goroutine和Channel 在理解context包之前 xff
  • ubuntu —— 命令行访问网页

    span class hljs variable style margin 0px padding 0px span sudo apt get install w3m span class hljs variable style margi
  • VINS-Mono 加rgbd

    通过对比VINS Mono与其RGBD版本 xff0c 分析其改动思路 一 feature tracker feature tracker node cpp 头文件加入了ros的多传感器时间戳 include lt message filt
  • MFC使用HttpGet和HttpPost方法与服务器通信

    处理过程封装到CHttpClient类中 同时支持http和https HttpClient h cpp view plain copy HttpClient h ifndef HTTPCLIENT H define HTTPCLIENT
  • 【Micropython】肝货~使用USB_VCP通过USB串口与树莓派或PC端通信

    为什么要使用USB VCP xff1f Micropython有很多串口 xff0c 例如PYboard xff0c 有5个串口可以使用 xff0c 但是 xff0c 平时我们在做一些项目的时候 xff0c 需要使用的引脚较多 xff0c
  • npm 401 BASIC realm=“Sonatype Nexus Repository Manager“

    今天在做vue项目 切换私服nexus npm login时 遇到了下面的问题error Unable to authenticate need BASIC realm 61 34 Sonatype Nexus Repository Man
  • 通过HTTP协议利用VC++ POST通信开发

    转载地址 xff1a https blog csdn net lhsxsh article details 4200486 void CMFCForm1Dlg OnBnClickedOk TODO 在此添加控件通知处理程序代码 CDialo
  • java源码解析JavaParser

    package com bootdo jparser import java io File import java io FileNotFoundException import com github javaparser JavaPar
  • 关于串口通讯查询与中断两种方式

    串口通讯有查询与中断两种方式 2011 09 13 13 31 我们知道串口通讯有查询与中断两种方式 xff0c 但是对于两种方式的区别很多人并不是非常清楚 xff0c 对于两者的实现到底有和不同呢 xff1f 让我们简单的总结如下 xff
  • linux 下postgresql遇到几个问题

    问题1 xff1a Job for postgresql service failed because the control process exited with error code See 34 systemctl status p
  • ActiveMQ连接数过多,导致ActiveMQ无法正常接入数据

    ActiveMQ跑了一段时间 xff0c 会出现连接数据过多的报错 Could not accept connection org apache activemq transport tcp ExceededMaximumConnectio
  • Axure嵌入Echarts图表--javascript (js)注入

    前言 用Axure做Web原型设计时 xff0c 经常会有图表 特别是大屏可视化或者数据可视化的原型中就更为常见 传统的方法是通过既有的图形或者曲线加上文字来实现 由于Axure可以通过javascript注入 的方法进行简单的拓展 xff
  • Axure嵌入Highcharts图表--javascript (js)注入

    前言 上次发现可以通过javascript js 注入实现在Axure 里引用Echarts图表 xff0c 提升原型展现能力 xff0c 特别是在高保真原型 既然可以实现Echarts的图表引用 xff0c 那么能否用同样的方法引用Hig
  • 一个比较好用的网络爬虫软件GooSeeker

    最近要搜集一些新闻语料 xff0c 看论文发现一个叫GooSeeker的爬虫软件还不错 xff0c 看了一天多的教程终于跑起来了 xff0c 趁着这会在抓新浪新闻过来发篇blog 这个爬虫是作为Firefox的插件出现的 一开始还觉得不够强
  • LibreELEC(kodi)安装

    想体验 xff08 折腾 xff09 kodi xff0c 刚好手上有个空置的树莓派 xff0c 而LibreELEC是轻量化kodi分支的开源系统 xff0c 本文介绍自动和手动安装LibreELEC xff08 LE xff09 原文地
  • LibreELEC(kodi)安装 IPTV

    kodi的PVR IPTV Simple Client插件通过直播源可以实现类似电视机顶盒播放电视节目的基本功能 xff0c 本文将介绍LibreELEC xff08 kodi xff09 安装和简单设置的PVR IPTV Simple C
  • Axure中继器组件化GIS地图

    虽然可以使用JavaScript注入的方式将GIS地图嵌入Axure xff0c 但每次使用地图都需要重复嵌入并修改代码 xff0c 不太方便 那么 xff0c 能不能实现组件化呢 xff1f 我们可以使用中继器 xff08 repeate
  • 比特米盒子刷安卓ATV6.0

    最近海鲜市场有很多比特米盒子 xff0c 50多块包邮 xff0c 买来的盒子回来折腾下 xff0c 买回来发现一直卡在 系统启动 34 中无法进入 xff0c 不知道原来的是啥系统 xff0c 看来只能找找线刷的办法 xff0c 重新拯救
  • Visual Studio Code(VSCode) 编辑/编译/调试 C++ 代码

    前言 最近想要切换编辑工具 xff0c 之前工作中使用过 Source Insight xff0c Eclipse xff0c CLion 来写 C 43 43 代码 目前来说 Source Insight 已经非常古老 xff0c 只有编