vscode + wsl/ssh 搭建linux下C++的编译、调试环境

linux下调试C++程序一般用gdb或log的方式,gdb虽然能断点单步调试,但是纯命令行调试不够方便直观,vscode推出了远程调试的一些插件,可以方便的搭建linux下的C++开发、调试环境,下面就一步步打造linux的的开发环境吧

vscode环境配置

  • 安装插件 Remote - SSHRemote - WSLRemote Development, C/C++,全部选微软官方的版本
    vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第1张图片
    在这里插入图片描述
    在这里插入图片描述

  • 添加要连接的远程机器,wsl和ssh的操作方式是一样的,只是ssh需要配置一下ssh登录,这个随便一搜就有了

  • vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第2张图片
    这里我是连的本地的wsl版本的linux

  • 配置调试
    vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第3张图片
    从 Remote Explorer定位到你需要调试的工程的入口
    vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第4张图片

  • 在远程机器上安装vscode插件(此时我们的环境已经在远程机器上了)

  • vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第5张图片
    把第一步的那些插件在远程机器上再装一遍,会有如上提示,告诉你这是装在wsl上的

远程linux机器配置

  • 安装g++, make等一堆编译、调试工具,以Ubuntu为例

sudo apt install g++ make gdb

vscode调试配置

  • 打开需要调试的工程的任意源文件后,(这里不打开一个文件的话,会报错),按下F5,选gdb/lldb那一栏
    vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第6张图片
    选择你的编译器,这里就按需选择了,我这里选的是g+±9
    vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第7张图片
    然后再你的在你的.vscode目录下会出现两个文件,顾名思义,launch.json是启动调试的入口文件,task是其他子任务vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第8张图片

launch.json配置

默认的长这样:
vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第9张图片

  • program:调试的时候启动的程序路径,也就是你需要调试的程序路径,一般设置成你编译输出的路径即可(要定位到文件,不能只是目录),这里按需修改即可
  • args:程序启动时的命令行参数,没有就留空
  • cwd:程序运行的工作目录,按需修改,默认就是你按F5时当前的目录
  • preLaunchTask:启动调试前的任务名称,一般就是编译了(如果是调试现有程序,就不需要这一步,可以直接删掉),这个后面将attach调试的时候再提
  • miDebuggerPath:就是调试器的路径了,也就是刚才安装的gdb的路径,一般就是默认的路径

tasks.json

这个文件定义了一些任务,可以再launch.json中调用
默认长这样:
vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第10张图片

  • lable就是任务名称了
  • command:任务启动的命令,我们这里需要进行编译,所以命令就是g++的路径了,如果之前你选了其他编译器,自然就是其他编译器的路径
  • args:命令的参数,这里就是g++的参数,需要注意的是,不能在一个字符串中写多个命令选项,会报错,需要拆开,比如:
    vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第11张图片
    因为这样的命令参数传递给g++后就变成了:

g++ "-Werror=format -std=c++17 -L. -lNanoLog -pthread -lrt"

正常g++的参数是不需要 引号的
正确的姿势:
vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第12张图片

愉快的调试吧

完整launch.jons:

{
    // 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": "g++-9 - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/sampleApplication",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++-9 build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

完整task.json

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++-9 build active file",
            "command": "/usr/bin/g++-9",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/sampleApplication",
                "-I", "../runtime",
                "-Werror=format", "-std=c++17",
                "-L.", "-lNanoLog", "-pthread", "-lrt"

            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

打好断点,按下F5,就能像visualstudo中一样方便的调试了
vscode + wsl/ssh 搭建linux下C++的编译、调试环境_第13张图片

使用make + makefile进行编译构建

上面我们使用的是g++进行编译的,但是很多开源项目都是用的make进行构建的,那我们来调整一下task.json,然他支持make;

其实经过上面的配置,我们能理解到,task.json其实就是配置一下构建的命令而已,所以我们把command修改为makeargs修改为make对于的命令参数即可,

使用make要注意makefile的位置和工作路径的位置关系,不然容易出现找不到makefile的问题

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++-9 build active file",
            "command": "make",
            "args": [
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

launch.json、task.json中的一些预定义变量查询:
https://code.visualstudio.com/docs/editor/variables-reference

你可能感兴趣的:(C++基础知识,c++,vscode,gcc/gdb编译调试,linux,ssh)