Windows环境使用VSCode 调试Linux环境C/C++代码

2023-11-03

        在Win10中,配置VScode调试Linux环境下的C语言的代码,配置过程不太常用,特此记录下。

1、源码文件,都一样,怎么写看个人爱好。

2、VSCode安装这里也不做赘述。VSCode默认安装好是使用的英文,想要中文界面,可以在扩展中安装中文语言包就可以了,如下图:

 

 安装完成后,会提示重启,按照提示操作即可。

3、安装远程插件并配置

        由于Window上编译Linux系统下的代码,因此可将Linux看作是另外一台电脑,不管是不是虚拟机,容器之类的,或者说Windows 10 上通过Windows商店安装的Ubuntu系统,只要能通过ssh远程连接,就可以通过VSCode来远程调试,因此VSCode需要安装远程插件,在插件搜索框搜索Remote SSH,将下图中选中的插件都安装上,其他相应插件会自动安装。

        

 然后点击左边栏上的如下图红圈中的图标,即远程连接管理的图标:

然后点击SSH TARGETS左边的箭头展开后点击右边的加号”+“,如下图:

 

 然后会弹出如下图的提示:

在框里面按照在命令行上输入ssh命令的格式输入,有一点不同的时,如果Linux系统的ssh服务端口不是默认端口(22)的话,需要指定端口,指定端口只需在IP地址后面加上冒号再加端口即可,不用像命令行上一样加参数p来指定端口,如下图:

 

 2222为Linux系统上设置的ssh端口,可查看/etc/ssh/sshd_config中的port参数。

回车后,即可在左边的SSH TARGETS下面看到一个指定IP的远程连接,此时可以在对应IP上右键选择进行连接,如下图:

点击后会弹出输入密码的提示,如下图:

 在下面一行输入密码即可连接到对应的Linux系统。

会弹出config文件列表,选择第一个:

选择刚配置好的服务器,提示选择的系统,根据你自己的系统进行选择即可:

 连接到Linux后,再按下图所示选择打开文件夹:

 点击后会弹出选择提示框,用来选择代码所在目录,默认是打开的登录用户目录,下方会列出目录下的文件和子目录,可通过鼠标点击来选择对应目录,也可以直接填入路径来定位到代码所在的目录:

 选择好代码目录后,点击”确定“即可。

4、安装C/C++插件

        接下来需要在VSCode中安装C\C++的插件,在插件搜索框中输入”C++“,安装红色框中的插件:

        安装完成后,可以打开源码文件,写代码的时候会有自动补全的提示。

        源码写好后,需要写好Makefile,不写Makefile写一个编译的shell脚本也可以,后续配置编译任务时可以用编译脚本,也可以在编译任务里面添加编译的命令,但为了方便脱离VSCode编译代码,最好写一个Makefile或者编译的shell脚本。

5、编辑任务配置。

        1)快捷键(Ctrl+Shift+p),输入task,选择 配置任务:

        注意,这里在选择配置任务的时候,最好先在VSCode里面打开代码文件,否则不会提示C\C++的生成活动文件,如下图:

         2)选择gcc或者gcc7都可以,后面会修改里面的内容,选择哪个都无所谓,但如果要在VSCode的任务配置里面配置编译命令,这里最好就选择与Linux系统匹配的gcc版本。选额好之后就会在.vscode目录下生成一个task.json文件,即任务配置文件。如下图:

         3)文件内容需要进行修改,如果是需要通过vscode配置代码编译的gcc命令,则只需要对那个代码来改动即可,这里面有两个变量,fileDirname和fileBasenameNoExtension,如果不确定这两个变量所指向的目录,可直接不修改,后面执行此任务的时候会输出,根据输出再来调整目录即可。正常情况下fileDirname指向的是.vscode目录,如需改到选择的代码目录,可以用变量workspaceFolder。

        我的项目本身是已经写好shell编译脚本的,此处就说明下shell编译脚本的task任务配置修改:

        {

            "type": "shell",

            "label": "test build",

            "command": "./build.sh x86",

            "problemMatcher": []

        }

以上为我自己的项目改动的例子,只需要保留四个参数:

        type表示执行的命令类型,执行shell脚本,因此这里就是指定为shell;

        label是标签,这里看自己心情填写,不过后面调试任务会用到这个名字;

        command就很好理解了,命令行上怎么执行编译,这里就是什么。

        最后这个problemMatcher暂时没有用,可以不填,也可以直接不要。

下面再说说如果是直接写好Makefile的情况下,执行make的任务配置的写法,参数还是这几个:

        type还是填shell,因为命令行上执行make也相当于是shell命令;

        label跟上面一样看自己心情写;

        command,这里因为是要执行make命令,因此这里就写make,其实也跟上面一样,命令行上执行什么这里就写什么;

        problemMatcher也是一样,不用填写。

        修改完后的内容如下:

        {

            "type": "shell",

            "label": "test build",

            "command": "make",

            "problemMatcher": []

        }

         4)任务配置文件保存好后,接下来就要运行配置的任务。.快捷键(Ctrl+Shift+p),输入run task,选择运行任务,则会弹出刚刚在任务配置中配置的标签内容,选择需要执行的任务即可。

 

         执行此任务后,代码就会编译并生成执行文件。

6、编辑调试配置

        点击运行于调试按钮,选择添加配置,如下图:

        选择后会自动生成launch.json文件,并同时会弹出选择列表,选择”C/C++gdb启动“即可,默认配置也需要进行对应修改,对其中参数做部分说明:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "test", //名称随便取
            "type": "cppdbg", //调试类型
            "request": "launch", //请求配置类型
            "program": "${workspaceFolder}/test/test", //可执行程序完整路径(包含程序名称)
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/test", //可执行程序完整路径(不包含程序名称)
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "test", //task 任务名称(与tasks.json中名称一致)
            "miDebuggerPath": "gdb file absolute path" //gdb完整路径
        }
    ]
}

         其中的preLaunchTask参数就是指定加载程序前,需要执行的任务,这里自然就是前面配置的编译任务了,注意名字是编译任务的label参数,若不一致则加载的时候会提示没有对应任务。

        点击左上角运行的三角符号,选择刚刚配置的调试任务,就可以开始调试程序,打断点、单步调试都可以直接在VSCode上操作了。

         另外说明下,本人实在Windows 10 的商店里面直接安装的Ubuntu,这个系统跟虚拟机有些不同,因为它本身没有单独分配IP,因此ssh的IP地址跟本机IP地址是相同的,但由于本机已经使用了ssh协议默认的22端口,因此在Ubuntu系统中最好指定到别的端口去,否则可能会出现ssh无法连接到Ubuntu上的情况。如果需要界面UI调试的朋友,请自行百度,这里不再占用他人功劳了。

 

 

 

 

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

Windows环境使用VSCode 调试Linux环境C/C++代码 的相关文章

  • 完整的 C++ i18n gettext()“hello world”示例

    我正在寻找完整的 i18ngettext 你好世界的例子 我已经开始了一个基于的脚本使用 GNU gettext 的本机语言支持教程 https web archive org web 20130330233819 http oriya s
  • 提高mysql导入速度[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我有一个很大的数据库22GB 我曾经用过进行备份mysqldumpgzip 格式的命令 当我提取 gz 文件时 它会生成 sql文件的
  • 为什么默认情况下不启用 arp 忽略/通告 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个需要经验才能回答的具体问题 为什么 arp ignore arp announce 在 Linux 安装 例如 debian 上默认不启用 有
  • Visual Studio - X11:缺少 DISPLAY 环境变量

    我正在使用 Visual Studio 2019 Enterprise 开发跨平台 Windows Linux x64 GUI 应用程序 在这个 2019 版本中 我们可以使用 Visual Studio调试平台 Windows 本机 和
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • GCC 详细模式输出解释

    我是 Linux 新手 谁能向我解释一下我的 hello world 程序的以下详细模式输出 另外 这些文件是做什么用的crt1 o crti o crtend o crtbegin o and crtn o and lc and lgcc
  • Linux 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • PHP mail() 函数不发送邮件

    我有一个小问题 我正在使用一个工作脚本 在我的测试帐户 共享服务器上工作 使用 mail 函数通过 PHP 发送邮件 我刚刚得到了一个专用服务器 但我还无法让该功能发挥作用 在过去的 10 个小时左右的时间里 我阅读了有关 BIND 用于
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • 为什么我的代码在编译用于分析 (-pg) 时在多线程下运行比在单线程下运行慢?

    我正在写一个光线追踪器 最近 我在程序中添加了线程 以利用 i5 四核上的附加内核 奇怪的是 应用程序的调试版本现在运行速度变慢 但优化后的构建运行速度比添加线程之前更快 我将 g pg 标志传递给 gcc 以进行调试构建 并将 O3 标志
  • X 按键/释放事件捕获,与焦点窗口无关

    我想记录所有传入的按键事件 无论哪个窗口处于焦点状态或指针位于何处 我编写了一个示例代码 它应该捕获当前焦点窗口的按键事件 include
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • 使用 hcitool 扫描低功耗蓝牙?

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

随机推荐

  • 宝塔Linux面板版本免费、专业和企业区别对比选择攻略

    宝塔Linux面板分为免费版 专业版 企业版和企业运维托管版 有必要购买专业版或企业版吗 宝塔Linux面板专业版 企业版和免费版有什么区别 使用免费版的Linux面板商用吗 新手站长来详细说下宝塔Linux面板免费版 专业版 企业版 企业
  • Magisk模块开发指南

    BusyBox Magisk整合了功能完整的BusyBox二进制文件 包括对SELinux的完整支持 执行文件位于 data adb magisk busybox Magisk的BusyBox支持运行时可切换的 ASH Standalone
  • ffmpeg基础五:单独解码裸流aac或MP3或H264

    av parse parse2 用于从输入的数据流中将流中的压缩编码数据一帧一帧的分离出来 也就是从一端数据码流中将需要解码的packet读取出来 由于H264由特殊的格式组成 StartCode NALU Header NALU Payl
  • Python - 实现logging根据日志级别输出不同颜色

    文章目录 一 完整代码 二 代码解释 三 附 自定义颜色对应代码 前段时间因为工作需要脚本打印不同颜色的日志 查找了网上的一些方法 大部分都需要再安装第三方模块 后来选择采用比较简易的办法 类似于print 函数自定义内容颜色 这种方式的缺
  • 14、mysql底层知识进阶-MySql中常用工具:mysqladmin、mysqlbinlog、mysqldump、mysqlimport、mysqlshow

    目录 1 MySql中常用工具 1 1 mysql 1 1 1 连接选项 1 1 2 执行选项 1 2 mysqladmin 1 3 mysqlbinlog 1 4 mysqldump 1 5 mysqlimport source 1 6
  • Qt 软件开发框架(详细版)

    该文章用图例 代码方式演示了 一个线上软件基本框架 精简 开发工具Qt VS2015 一 基本要素 这里会用简单的图例和完整代码 这里以Qt代码为例 说明一个线上软件基本的框架 一个线上windows软件 一般分为几个大的部分 1 UI模块
  • 什么是性能测试?

    什么是性能测试 什么是性能测试 压力测试软件性能测试是一种测试类型 旨在确定系统的性能以衡量性能 验证或验证系统的质量属性 例如在各种负载条件下的响应性 速度 可伸缩性 稳定性 在混合负载条件下对系统进行了测试 并检查了系统在各种工作负载下
  • 空洞卷积aspp 学习笔记

    ASPP 以下内容转自 空洞空间卷积池化金字塔 atrous spatial pyramid pooling ASPP 对所给定的输入以不同采样率的空洞卷积并行采样 相当于以多个比例捕捉图像的上下文 上图为deeplab v2的ASPP模块
  • Oracle 表碎片检查及整理方案

    作者 JiekeXu 来源 公众号 JiekeXu DBA之路 ID JiekeXu IT 大家好 我是 JiekeXu 很高兴又和大家见面了 今天和大家一起来看看 Oracle 表碎片检查及整理方案 欢迎点击上方蓝字关注我 标星或置顶 更
  • GitHub个人Blog完全攻略

    Git个人网站完整攻略 当前越来越多的大牛转战GitHub的时候 我们也应该考虑搭建自己的一个Blog来记录自己的学习和成长经历了 一则 作为未来的码农是需要自己与国际 至少是与主流的代码托管相接触的 二则 我想自己在校的时光也许需要重新好
  • Nvidia Video Codec SDK——AppDecImageProvider动态模糊

    Nvidia Video Codec SDK AppDecImageProvider动态模糊 cpp文件 cu文件 核函数focalLength 获得注视点对应深度 核函数Bgra32ToSmooth cpp文件 初始化变量 平滑函数Bgr
  • Web 中间件漏洞

    1 Tomcat Tomcat是Apache Jakarta软件组织的一个子项目 Tomcat是一个JSP Servlet容器 它是在SUN公司的JSWDK Java Server Web Development Kit 基础上发展起来的一
  • 2022全年度冰箱十大热门品牌销量榜单

    自2022年年初以来 各地纷纷部署支持包括冰箱在内的家电大宗消费政策措施 其中家电补贴政策是刺激家电消费的主旋律 宏观经济政策环境改善 利好冰箱行业的长期发展 根据鲸参谋数据统计 今年京东平台冰箱的年度累计销量达到1400多万件 同比增长1
  • python网络爬虫--项目实战(1)--500px图片爬取

    一 目标 爬取500px图片并保存 目标网址 https 500px com cn community discover 二 分析 2 1 网站分析 经过研究发现该网站没有点击下一页的按钮 然后往下拖动下拉条直到最后 会自动刷新出新的内容
  • 机器学习加强-随机森林

    一 概述 1 1 集成算法概述 集成学习 ensemble learning 是时下非常流行的机器学习算法 它本身不是一个单独的机器学习算法 而是通 过在数据上构建多个模型 集成所有模型的建模结果 目标 集成算法会考虑多个评估器的建模结果
  • 使用Aardvark(Total Phase)监测I2C链路

    使用Aardvark监测I2C链路 项目调试实例 1 Aardvark是Total phase公司推出的一款I2C SPI总线的调试工具 其功能包括 作为主 从设备调试I2C或SPI的相关功能 监测I2C总线上的数据 调试GPIO端口等 2
  • 请求分页内存管理的模拟 c++代码_C开发实战-内存管理

    作用域和变量 作用域就是作用的范围 当定义变量时不同作用域的变量位于不同的内存空间 变量按照不同的作用域可以分为局部变量和全局变量 而局部变量和全局变量都可以使用static修饰 static修饰的局部变量叫静态局部变量 static修饰的
  • Android Studio快捷键失效的问题及实用快捷键汇总

    Android Studio快捷键失效的问题及实用快捷键汇总 如题 如果你的Android studio快捷键失效了 并且检查了编辑器 没有动过配置 那么你的快捷键就是冲突了 例如QQ 输入法 音乐播放器等 一般情况下打开正在使用的软件的设
  • 关于对java项目中应用分层的简单理解

    一 基于springboot的逻辑分层结构 1 概念定义 大部分来自于 https blog csdn net weixin 39781363 article details 112028431 1 PO 和数据库表对应 Persistan
  • Windows环境使用VSCode 调试Linux环境C/C++代码

    在Win10中 配置VScode调试Linux环境下的C语言的代码 配置过程不太常用 特此记录下 1 源码文件 都一样 怎么写看个人爱好 2 VSCode安装这里也不做赘述 VSCode默认安装好是使用的英文 想要中文界面 可以在扩展中安装