01Windows使用VSCode远程Linux(Ubuntu/CentOS)开发/调试C/C++(超详细)

2023-11-05

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
}

完整的配置文件可以查看我的加强版,带有如何链接静态库和动态库。

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

01Windows使用VSCode远程Linux(Ubuntu/CentOS)开发/调试C/C++(超详细) 的相关文章

  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • 当在 python linux 中执行命令 os.system() 时,在 python 中给出响应 yes/no

    考虑一个像这样的命令 yum install boto 当我在终端中执行时 要继续 会询问我是 否 我可以像这样用 python 回应它吗 os system yum install boto Next Yes 将通过相同的 python
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • Linux 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • EULA 接受 Bash 脚本

    我有一个尝试安装垃圾箱的脚本 除了 bin 在 more 中打开 EULA 之外 一切正常 在脚本再次开始并自行完成安装之前 您必须手动 ctrl c 退出此 more 实例 因为这更多的是逃离 shell 所以脚本在打开后不知道要运行什么
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio
  • 在 Windows / Linux 中创建 Mac 包

    我自己努力制作一个 r 包 我按照 stackoverflow 中上一个问题的说明进行操作如何为外行开发软件包 http cran r project org bin windows Rtools 以下是我根据上一个问题采取的步骤 在新的
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 如何从 Linux 命令行确定 LCD 显示器是否打开

    如何通过 Linux 命令行判断计算机的显示器是否打开 关闭 我传统上认为显示器是仅输出的设备 但我注意到 Gnome 显示器首选项对话框具有 检测显示器 功能 这可以推广到确定显示器是否物理关闭吗 VESA DDC 连接是I2C http
  • C# - OPC-UA 服务器应用程序尚未在 Linux 计算机中创建 PKI 证书

    当我跑步时OPC UA serverWindows 机器中的 C 应用程序 然后 OPC UA 服务器已创建证书路径C ProgramData OPC Foundation pki own 并在此路径中生成一些证书 但是当我在中安装 OPC
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径

随机推荐