0.背景

最近在学习linux webserver开发,需要在linux下调试自己的C/C++代码,但是linux下不像在windows下,直接Visio Studio或者其它集成开发环境那么方便,现在的linux下开发,比较麻烦。于是可以考虑使用VScode远程开发。但是网上的很多教程都不是很清晰,这里在尝试了很多教程后,踩了不少坑,最后总结如下。

1.系统配置

远程系统:ubuntu18.04(虚拟机)

开发主机:windows10

2.ubuntu远程端安装软件和设置

(1)安装必要软件:ssh(系统通信),gdb,gsdbserver(代码调试):

sudo apt-get install openssh-server
sudo apt-get install gdb
sudo apt-get install gdbserver

(2)创建测试文件夹和文件

注意:

  • 虽然你可能想一步到位,直接拿自己最后的程序测试,但是这里不建议这么做,建议先新建一个hello,world程序测试,成功后再调试自己的代码。
  • 文件夹位置和内容无所谓,但是最好简单一些
cd ~/桌面
mkdir testvs
cd testvs
touch main.cpp
gedit main.cpp

其中main.cpp代码为:

#include <stdio.h>

int main()
{
int a = 1;
printf("hello world\n");
getchar();
return 0;
}

(3)编译,得到可执行文件

g++ main.cpp -o main -g

注意:

  • 加-g选项,不然没法用gdb调试
  • 运行后testvs文件夹下有main.cpp和main两个文件

(4)启动gdbserver

(4.1)首先看一下自己的ubuntu系统ip地址:

hostname -I



可以得到本地ip地址为192.168.199.131

(4.2)启动gdbserver(注意更改ip地址和测试文件目录)

gdbserver 192.168.199.131:2000 ~/桌面/testvs/main

3.主机VScode设置

(1)首先在VScode中安装下面几个插件:

  • C/C++
  • C/C++ Extension Pack
  • Remote - SSH
  • Remote Development

(2)ssh远程连接

左下角“管理”->"控制面板",之后找到选项“Remote-SSH:Connect to Host...” -> Add New SSH Host...

输入ubuntu系统ip地址,出来新界面




红框内输入ubuntu系统密码,左下角显示绿色ip地址即连接成功,如下图。

(3)打开测试文件

打开文件夹 -> 选择测试文件夹目录,点“确定”按钮



选中C/C++扩展,“在SSH:XXX中安装”。C/C++ Extension Pack扩展同理

然后重启Vscode和Ubuntu中的gdbserver(一定得要重启,否则接下来的步骤会报错)重新执行上述远程连接流程。

(4)设置配置文件

(4.1)配置tasks.json

从菜单栏选择Terminal>Configure Default Build Task, 在下拉栏里选择C/C++: g++ build active file. 之后生成tasks.json文件,将内容更换为:

{
// 有关 tasks.json 格式的文档,请参见
// https://go.microsoft.com/fwlink/?LinkId=733558
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-std=c++11",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{ //删除二进制文件
"type": "shell",
"label": "delete output file",
"command": "rm",
"args": [
"${fileDirname}/${fileBasenameNoExtension}"
],
"presentation": {
"reveal": "silent", //删除过程不切换终端(专注程序输出)
}
}
]
}

(4.2)配置launch.json

在菜单栏选择Debug>Add Configuration, 选择C++ (GDB/LLDB), 在下拉栏中选择g++ build and debug active file.生成launch.json,内容更改为:

{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build active file",
"postDebugTask": "delete output file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}

4.运行调试

在main.cpp下调试运行即可

vscode远程调试c++的更多相关文章

  1. vscode远程调试node服务端

    { "type": "node", "request": "attach", "name": &qu ...

  2. VSCode远程调试Go程序方法(Attach)

    set launch.json { "name": "Attach", "type": "go", "requ ...

  3. windows vscode 远程调试代码

    需要: vscode + Remote-ssh(vscode插件中下载) openssh (https://www.mls-software.com/files/setupssh-8.0p1-2.ex ...

  4. VSCODE 配置远程调试环境

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16691460.html 我的需求是,在Windows桌面 ...

  5. [视频教程] 配置vscode的PHP自动补全提示与使用Xdebug进行远程调试debug

    默认下载安装完的vscode并不能准确提示和检测PHP的语法错误,需要手动指定一下本机的PHP程序路径.按下面的操作配置完后就能在文件保存的时候检测语法有无错误.打开文件->首选项->se ...

  6. 真机远程调试 ( IOS Android 以及微信,weex)

    1.以前cordova远程调试,Android的直接连接USB后,用chrome打开chrome://inspect网址 IOS的打开Safari的developer下. 这是因为cordova的we ...

  7. 远程调试Spring项目

    目录 服务端启动: 启动jar包: 使用环境变量参数调试jar包: 使用mvnDebug启动SpringMVC项目: 使用mvn启动: 使用Tomcat,非嵌入式启动: 客户端设置: IDEA设置: ...

  8. 利用VS2017跨平台远程调试aspnetcore应用

    vs2017开始支持跨平台远程调试coreclr的应用,通常用于调试linux与mac上运行的aspnetcore程序,而如果运行在docker中的应用 要使用跨平台远程调试功能,首先运行corecl ...

  9. VSCode 远程开发(带免密)

    VSCode 远程开发(带免密) 简介 Visual Studio Code(以下简称 VS Code)从1.35.0版本正式提供可以在本地编辑远程开发环境的文件的功能,具体实现如下图 安装完成Rem ...

随机推荐

  1. 动态div点击事件传递对象参数格式-草稿889

    <button type='button' style='border: 1px solid #eeeeee;color: #717070;height: 20px;border-radius: ...

  2. 微信小程序获取当前时间戳、获取当前时间、时间戳加减

    //获取当前时间戳 var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; console.log("当前 ...

  3. Django框架中settings.py注释

    1 # coding:utf8 2 """ 3 Django settings for DjangoTest project. 4 5 Generated by 'dja ...

  4. Python入门-正则表达式

    正则匹配函数 # 需要先导入re模块 import re #字符串,匹配查找 info = "www baidu com" print("=======字符串自带find ...

  5. JavaSE常用类之File类

    File类 只用于表示文件或目录的信息,不能对文件内容进行访问. java.io.File类∶代表文件和目录.在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到本类. File类不能访 ...

  6. Spring-级联赋值

    一.级联赋值第一种方法 1.创建Emp类 package com.bean; public class Emp { private String EName; private String gende ...

  7. 查域名对应ip,测试端口是否可访问通

    根据命令查询软件包名称 yum provides */nslookup 根据域名解析ip nslookup 域名 示例:nslookup smtp.163.com 测试端口 telnet ip 端口 ...

  8. 通过nfs将centos目录挂载到windows 系统的磁盘上

    环境:centos8,windows7 1.在centos上安装nfs服务 yum -y install nft-utils 2.启动nfs服务 systemctl start nfs-server ...

  9. python 面试题汇总

    1丶元组(list)和列表(tuple)的区别: 一:共同点: ①: 可以放置任意数据类型的有序集合,都是可以存放数字,字符串,对象等. ②:都支持 负索引,切片,随意嵌套等操作 二:不同点: ①: ...

  10. Java语言学习day12--7月11日

    ###16随机点名器代码实现 * A: 随机点名器案例代码 /* 随机点名器,集合改进 (学生的姓名和年龄) 现实中有学生这个事物,使用定义类的形式,描述学生事物 属性: 姓名,年龄 姓名存储了数组, ...