VS Code构建C++远程开发环境IDE

VS Code构建C++远程开发环境IDE

1. 前言

由于工作的需要,近期准备在Linux下开发C++程序。之前一直通过CLion直接在Linux机器上开发,然而由于我的笔记本是Windows系统,要切换到Linux总是要切换屏幕和键鼠,体验不够流畅。于是希望能够有一个方法能够让我通过Windows远程Linux进行开发,同时也能拥有IDE一般的开发体验。

通过一段时间的调研,也试过不少的方法,总结如下:

  1. Visual Studio支持的远程Linux开发功能:Visual Studio堪称宇宙IDE,功能强大而且Windows和Linux的开发体验一脉相承。然而程序体积庞大,并且配置较复杂,启动时间较长。如果希望使用cmake来进行项目构建,Visual Studio所提供的cmake模板与常规在Linux下构建cmake项目的模板结构有些差异。使用起来不太顺手;
  2. CLion的远程开发功能:配置相对简单,编程体验也非常优秀(尤其是CLion自带的很多重构方式,极大提升编程效率)。然而远程开发首先要在本地构建项目,然后通过CLion将项目文件传输到目标Linux机器,然后才开始调试。不能实现直接打开远端的项目(可能我没找到) 来进行编程。因此放弃这种方式;
  3. 通过x11vnc来远程Linux编程:在网络不好的时候,编程体验非常糟糕;
  4. 通过xming+putty来启动远程CLion进行编程:同样在网络不好的时候编程体验非常差。而且不能实现本地机器和远程机器之间Copy and Paste;
  5. 通过ssh+tmax+vim来进行编程:对于动手能力强的同学,这是最推荐的做法。然而VIM的学习成本高,要配置出如IDE的编程体验,需要安装和配置很多插件。没有一定的动手和钻研能力,建议不要轻易尝试。(个人通过2-3周的尝试和适应,最后还是选择放弃);
  6. 通过VS Code进行远程开发:承袭VS Code的编程体验,流畅度和稳定度都非常良好。而且程序较轻量,打开速度很快。各种插件几乎涵盖日常编程需求。各种语言都可以统一在VS Code下面来编写(个人觉得这个特点非常优越)。美中不足就是毕竟不是传统IDE,在一些重构和自动生成的功能不如Visual Studio和CLion。不过瑕不掩瑜,这是当前个人最提倡的远程开发C++的方式;

2. 准备工作

  1. 操作系统:本机Win10,远程机器Ubuntu 18.04
  2. VSCode: 1.41
  3. CMake: 3.14.7
  4. VSCode插件:
    1. C++ Extension
    2. Remote-SSH
    3. CMake

3. 环境搭建

3.1 Remote SSH配置

根据官方文档,点击配置教程

完成配置后,VSCode已经具备常用SSH Client和所有功能:

  1. 可以方便的从本地机器复制黏贴文件和文本到远程机器;
  2. 可以通过Terminal完成所有命令行操作
  3. 可以远程开启服务器上的项目进行开发
  4. 更多功能逐步发掘中

3.2 CMake配置

利用CMake配置可以十分方便的构建C++开发项目并且进行调试、测试、安装及部署。然而CMake本身就是一个非常灵活且复杂的工具,如果想要非常仔细的了解,建议阅读CMake官方文档

下面是一些我认为比较好的参考资料:

  1. CMakeLists.txt 语法介绍与实例演练
  2. Cmake实战指南
  3. 在linux下使用CMake构建应用程序

3.3 VS Code项目配置

通过Ctrl+P,选择"Edit Configuration(UI)",VSCode会自动在项目路径中添加.vscode文件夹,并且添加必要的内容,如"c_cpp_properties.json"和"settings.json"。
Edit Configuration(UI)

c_cpp_properties.json的内容大概如下

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",    // 将本地工作目录添加到include路径中,
                                            // 这样本地的所有头文件都可以被VSCode索引,这样编辑就不会触发红色的波浪线;
                "/usr/include/**"           // 将Linux下的引用路径添加到include路径中,
                                            // 对于一些第三方依赖库,如Boost的头文件,就能被VSCode索引
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

3.4 配置 launch.json

launch.json文件是告知VSCode在启动调试过程中如何启动程序,类似Visual Studio的调试选项。内容大概如下:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/[你的制定程序路径] 例如:/build/bin/xxx.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/build/bin", //这是你的工作目录,可以根据需要调整
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "preLaunchTask": "build debug", // 这是在调试之前需要执行的任务,需要跟task.json文件配合起来工作
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

3.5 配置 tasks.json

tasks.json文件是告知VSCode如何定义和执行一些任务,这些任务可以在编译前执行,也可以在编译后执行。通过tasks.json,VSCode获得极大的配置灵活性,而且也能很好的满足自动化需求。文件内容大概如下:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build debug",
            "type": "shell",
            "linux": {
                "command": "mkdir -p build && cd build && cmake -DCMAKE_BUILD_TYPE=Debug ../ && make", // 这项配置是定义在每次编译之前都会执行一遍cmake
            }
        }
    ]
}

3.6 测试

当配置好上述文件和插件之后,通过Ctrl+F5可以提请调试模式,VSCode会根据launch.json里面的内容,首先找到preLaunchTask定义的任务首先去执行cmake等编译任务,然后再进入到调试状态。通常可以通过Ctrl+F7先进行cmake的编译,如果有问题可以比较直观的显示出问题存在的文件和行数。

debug

4. 问题解决(持续更新)

  1. 调试过程中受到SIGUSR1的报错导致调试中断

    这个问题主要是GDB内部的问题,某些程序在运行过程中收到SIGUSR1,GDB如果没有设定对于这些信号的处理的方法的话,默认是会中断程序的。所以如果想要不中断程序,直接忽略SIGUSR1的信号,则需要在gdb里面设置一下handle SIGUSR1 nostop。设置的方法如下:

    1. 方法一:在命令行中输入:gdb [执行程序,如xxx.out] => 在进入gdb之后,输入handle SIGUSR1 nostop。该方法只适合直接使用gdb进行调试时使用,如果希望每次调用gdb的时候都能执行该命令,则使用方法二;
    2. 方法二:在个人的home目录中,例如cd ~,进入/home/user/的目录; 然后家里一个文件.gdbinit,在文件中输入handle SIGUSR1 nostop。则以后启动gdb的时候都会带有该项设置。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值