01Windows使用VSCode远程Linux(Ubuntu/CentOS)开发/调试C/C++(超详细)
其余VSCode的文章:
01Windows使用VSCode远程Linux(Ubuntu/CentOS)开发/调试C/C++(超详细)
02Windows下利用VSCode调试C/C++代码
03在Windows下通过VSCode远程Linux服务器调试C/C++加强版(包含头文件和链接静态库,动态库的配置)
04在Windows下通过VSCode远程Linux服务器调试C/C++加强版Plus(包含使用Cmake配合脚本在VSCode中编译)
我的另一篇是使用VSCode在Windows下调试Windows的C/C++代码,不用再使用VS这么大的软件,也是非常方便的,而本篇是远程调试Linux的C/C++代码,不过经常由于远程服务端的配置最后结束时出现问题。
1 参考以下论文
Windows使用VSCode远程Linux(ConteOS)开发/调试C/C++(超详细
以上文章我已经成功远程并且可以进行编译和调试。但是执行到最后的时候return 时报出以下错误,暂时没有去研究。
成功输出:
出错的小问题:
2 配置launch.json、tasks.json、settings.json写法示例,主要参考json格式每个key值的含义
以下是vscode做C++开发的配置。下面我只是方便大家看那些变量的意思,具体的配置文件看我文章末尾。
vscode做C++开发,launch.json、tasks.json、settings.json写法示例
3 配置的时候出现的中间小问题
1)出现终端被复用,说明你本机上的端口被占用了。在task.json添加
"presentation": {
"panel": "new" //防止端口重用
}
2)如果说你的文件没有找到该文件名和目录,证明你的配置文件task.json写错路径或者你的目录路径和文件名中带有中文。即出现以下错误。
4 下面给出我Linux下自己配置的tasks.json,launch.json,c_cpp_properties.json的内容:
tasks.json内容:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
// tasks需要改command,-I的路径和cwd即可,-o的参数最好生成在.cpp文件当前目录.
//注意:路径的出错很多时候与我们vscode打开时不是项目所在路径相关
"version": "2.0.0",
"tasks": [
{
"type": "shell", //类型
"label": "main", //任务名称
"command": "g++", //命令,Windows需要修改对应的编译器路径,但是添加了环境变量只写g++即可
"args": [
"-g",
"${file}",
"-I", //编译包含的头文件,与c_cpp_properties.json的includePath不一样,前者是编译使用,includePath是给VSCode不报错使用
//"${fileDirname}\/include\/",
"/home/tyy/spdlog/include",
"-o",
"${fileDirname}\/${fileBasenameNoExtension}",//要生成的可执行文件路径.fileDirname指当前目录,fileBasenameNoExtension指可执行程序无后缀的字符串.该.exe路径可以任意指定
"-ggdb3",//生成和调试有关的信息
"-Wall",
"-static-libgcc",//静态链接
"-std=c++11",//使用c++11标准
"-finput-charset=UTF-8",//输入编译器文本编码,默认为UTF-8
//"-fexec-charset=GB18030",//输出的exe文件的编码(Window)
"-D _USE_MATH_DEFINES"
],
"options":{
"cwd": "/usr/bin/" //上面command字段的路径
},
"problemMatcher": [
"$gcc"
],
"presentation": {
"echo": true,
"reveal": "always",//在终端中显示编译信息的策略,可以我ialways.silent.never
"focus": false,
"panel": "shared",//不同的文件的编译信息共享一个终端面板
//"showReuseMessage": true,
//"clear": false
}
},
]
}
launch.json内容:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
// launch需要改program,miDebuggerPath即可,但是需要注意preLaunchTask需要与任务的label相同,这样才可以调试对应的任务.
//注意:路径的出错很多时候与我们vscode打开时不是项目所在路径相关
"version": "0.2.0",
"configurations": [
{
"name": "main", //名称随便取
"type": "cppdbg", //调试类型
"request": "launch", //请求配置类型
"program": "${workspaceFolder}/tests/main", //可执行程序完整路径(包含程序名称),必须正确,否则无法调试可执行程序
"args": [],
"stopAtEntry": false,//程序调试时是否暂停在程序入口处
"cwd": "${workspaceFolder}", //调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
"environment": [],
"externalConsole": false,//调试时是否显示控制台窗口,一般设为true显示控制台窗口,即cmd窗口
"MIMode": "gdb", //调试模式,一般是gdb
"miDebuggerPath": "/usr/bin/gdb", //调试路径,即gdb完整路径,Windows时需要配置环境变量,改成该Min路径
"preLaunchTask": "main", //调试前开始执行的任务名称(与tasks.json中名称一致),如果有多个任务,这里可以唯一指定想要调试的任务
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
}
]
}
c_cpp_properties.json内容:
//本文一般需要改编译的命令compileCommands,和只能检索头文件的includePath路径.
//includePath是你其它文件能否被检测的重要字段.
//例如"spdlog/spdlog.h"头文件,若不包含/home/tyy/spdlog/include,则显示红色错误
//注意:路径的出错很多时候与我们vscode打开时不是项目所在路径相关
{
"configurations": [
{
"name":"gdb",//或者MinGW64(WIndows编译器)
"intelliSenseMode":"gcc-x64",
"compileCommands": "/usr/bin/gcc", //此文件一般只需改这里,g++,gcc,gdb都可以
"includePath": [ //添加自己项目目录的对应头文件路径,让vscode智能检索,但不是编译的包含头文件,两者不一样
"${workspaceFolder}",
"/usr/local/include",
"/home/tyy/spdlog/include"
],
"cppStandard": "c++11"
}
],
"version": 4
}
完整的配置文件可以查看我的加强版,带有如何链接静态库和动态库。