vscode C++远程调试运行(学习C++用)

vscode C++远程调试运行(学习C++用)攻略

简介

本文主要介绍如何使用Visual Studio Code(以下简称VScode)进行C++远程调试运行。远程调试可以方便读者在本地开发环境中编辑、调试和运行分布在远端主机上的代码,对于学习C++等场景非常有用。

步骤

1. 环境搭建

在使用VScode进行远程调试之前,需要先搭建好相关的环境。具体来说,需要在远程主机上安装好gcc/g++编译器和GDB调试器。

以Ubuntu为例,可以使用以下命令安装依赖环境:

sudo apt-get install g++ gdb openssh-server

2. 在远程主机上设置SSH登录

在VScode中进行远程调试,需要通过SSH登录到远程主机,因此需要先在远程主机上配置好SSH登录。

具体的操作过程如下:

  • 在远程主机上安装好openssh-server。
  • 打开终端,使用以下命令生成SSH密钥:
ssh-keygen -t rsa -C "your_email@example.com"
  • 将生成的公钥复制到远程主机的~/.ssh/authorized_keys文件中,如下所示:
cat ~/.ssh/id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

这样就完成了SSH登录的设置。

3. 在VScode中打开远程工作区

首先需要在VScode中安装Remote Development扩展程序。安装好后,在菜单中选择“Remote-SSH: Connect to Host...”选项,输入SSH登录信息,即可连接到远程主机。

连接成功后,可以在文件菜单中选择“Open Folder”选项,选择远程主机上的工作目录,此时VScode就会打开远程工作区。

4. 在VScode中配置调试环境

在VScode中,需要配置好调试环境。具体来说,需要配置以下两个文件:launch.json和tasks.json。

(1)launch.json

launch.json文件用于配置调试器的运行参数。

在VScode中,可以使用Ctrl+Shift+D快捷键打开调试面板,然后点击“create a launch.json file”选项,系统会自动生成具体的launch.json文件。

在编辑器里按Ctrl + Shift + P, 输入C++, 然后选择“C++: (GDB/LLDB) 生成 launch.json 配置” 快捷键自己输入也可以,打开编辑launch.json文件

在编辑完成后,需要根据实际情况进行修改。比如,需要指定程序的编译路径、运行路径、设置断点等。

示例如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Launch (GDB)",  // 配置名称,可以自定义
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/debug/hello_gdb",  // 可执行文件路径
            "args": [],
            "stopAtEntry": true,  // 设为 true 则程序会在main开始处停止
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

(2)tasks.json

tasks.json文件用于配置程序的编译和构建操作。可以使用以下快捷键打开并编辑tasks.json文件:

Ctrl+Shift+P -> Tasks: Configure Task -> C++: g++ build active file

示例如下:

{
    "tasks": [
        {
            "type": "cppbuild",  // 指定为 C++ 编译任务
            "label": "C/C++: g++ build active file", // 任务名称,可以自定义
            "command": "/opt/software/gcc/bin/g++", // g++编译器所在路径
            "args": [
                "-g",
                "${workspaceFolder}/*.cpp", // 编译的源代码
                "-o",
                "${workspaceFolder}/debug/hello_gdb" // 编译生成的可执行文件
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "version": "2.0.0"
}

特别地,需要注意的是,由于我们要在远端编译和调试程序,因此我们需要指定远程编译器的路径和选项,比如可以使用以下命令进行编译:

    "args": [
        "-g",
        "${workspaceFolder}/*.cpp",
        "-o",
        "${workspaceFolder}/debug/hello_gdb",
        "-L/usr/lib/x86_64-linux-gnu/ -lgtest -lpthread"   //远程库文件链接
    ],     

这样配置好后就可以编译调试C++代码了。

5. 在VScode中启动调试器

按F5键,就会启动调试器,如果程序设有断点,运行到断点处就会自动停下。如果需要单步运行,可以使用F10或F11键。

6. 示例说明

这里介绍两个使用示例,分别是:

  • 在VScode中进行远程GDB调试
  • 在VScode中进行网上获取的GTest测试

(1)示例1:在VScode中进行远程GDB调试

首先需要在本地新建一个C++工程,然后可以将该工程同步复制到远程主机中,也可以使用Git等版本控制工具在两个平台之间进行代码同步。

假设我们在工程中已经定义好了一个类MyClass,然后需要在远程主机中进行调试。此时,可以使用以下步骤进行调试:

  1. 在VScode中打开远程工作区,进入MyClass所在的目录。
  2. 使用以下命令编译代码:
Ctrl+Shift+P -> Tasks: Build
  1. 使用以下命令打开launch.json文件:
Ctrl+Shift+D -> 点击齿轮 -> Edit Configuration... -> C++ (GDB) Launch

然后在launch.json中修改program的路径为MyClass生成的可执行文件,比如:

 {
            "name": "C++ Launch (GDB)",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/MyClass",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [

            ]
        }
  1. 在代码中添加断点,可以使用F9或点击行号来实现。
  2. 按F5启动调试,程序会进入MyClass的main函数。

在这个过程中,调试器会自动在远程主机上运行gdbserver,然后再通过ssh的方式连接到远程主机中的gdbserver,并在本地启动gdb进行调试。具体的细节可以参考VSCode的官方文档。

(2)示例2:在VScode中进行网上获取的GTest测试

假设我们从网上获取了一份GTest程序,需要在远程主机上进行测试。

在VScode中,有一个调试求值控制台可以用于调试功能。假如在“workspaceFolder”位置下的“my_test.cpp”文件中编写了现成的GTest测试,就可以在VScode用Ctrl + Shift + D打开调试面板,然后在控制台中输入:

  • cd /mnt/disk/
  • g++ my_test.cpp -o my_test -lgtest -lpthread
  • ./my_test

第一行命令切换到远程工作区目录,第二行命令使用g++编译测试文件并链接gtest和pthread库,第三行命令运行编译后的可执行文件,从而进行测试。

以上就是两个使用示例,读者可以根据实际情况进行修改和调整。

结语

本文介绍了如何在VScode中进行C++的远程调试运行。本文仅作为介绍性文章,实际使用中可能需要根据不同的操作系统、开发环境、软件版本等进行合适的调整和修改,读者可以参考本文提供的思路进行操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vscode C++远程调试运行(学习C++用) - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言程序如何求学生总成绩和平均成绩

    下面是C语言程序求学生总成绩和平均成绩的完整攻略: 1.定义变量 首先需要定义变量来存储学生的成绩,分别包括语文、数学、英语、总成绩和平均成绩。 float chinese; float math; float english; float total; float average; 注意,这里用了 float 类型,因为成绩可能包含小数。 2.获取用户输入…

    C 2023年5月23日
    00
  • C语言实现停车管理系统

    C语言实现停车管理系统 简介 本文介绍如何使用C语言实现一个简单的停车管理系统。停车管理系统可以用来记录车位状态、车辆信息、收费等等相关内容。在本文中,我们将使用文件来存储数据,使用控制台界面进行输入和输出。 1. 设计数据结构 在停车管理系统中,最重要的数据结构是车辆信息。我们可以使用struct来定义一个车辆信息的数据结构: struct car_inf…

    C 2023年5月23日
    00
  • 游戏安全攻防技巧全攻略之攻击篇

    游戏安全攻防技巧全攻略之攻击篇 本攻略主要介绍游戏安全方面的攻击技巧和防御策略,旨在帮助游戏开发者提高自身的安全水平和防范黑客攻击。 常见的游戏攻击方式以及防御方法 1. SQL注入 攻击者利用SQL注入漏洞对数据库进行非法操作,例如删除、修改、篡改等。防御SQL注入主要有以下几个方法: 防范用户输入,对用户所输入的数据进行过滤或转义。 限制数据库用户的权限…

    C 2023年5月22日
    00
  • win10蓝屏0xc0000001安全模式进不了怎么办?win10出现0xc0000001的解决方法

    win10蓝屏0xc0000001安全模式进不了的解决方法 如果你在使用win10时,突然遇到了蓝屏问题,并且提示0xc0000001错误代码,那么该怎么办呢?事实上,很多用户在此遇到问题时感到很困惑,接下来,我们将为大家详细讲解win10蓝屏0xc0000001安全模式进不了的解决方法,帮助大家轻松摆脱此问题。 方法一:通过修复启动 修复启动是一种通用的解…

    C 2023年5月23日
    00
  • DB2编程序技巧 (七)

    下面是关于“DB2编程技巧 (七)”的完整攻略。 标题 “DB2编程序技巧 (七)” 概要 这篇文章主要介绍了在DB2编程中的一些技巧。本文主要讲解以下几个方面: CALL语句的使用 使用存储过程(Stored Procedure)增强代码复用性 正文 CALL 语句的使用 CALL语句是一个非常重要的DB2 SQL语句,它可以调用存储在DB2中的子程序。C…

    C 2023年5月23日
    00
  • C语言数组实现学生信息管理系统设计

    针对这个话题,我将为你详细讲解“C语言数组实现学生信息管理系统设计”的完整攻略。具体过程如下: 第一步:确定学生的信息结构 我们首先需要确定学生的信息结构,也就是每个学生信息需要包含哪些字段。常见字段包括姓名、学号、性别、年龄、联系方式等等。针对这些字段,我们可以使用C语言的结构体来进行定义,如下所示: struct Student { char name[…

    C 2023年5月30日
    00
  • iOS之异常与信号使用场景分析

    iOS之异常与信号使用场景分析 异常 什么是异常 异常是指运行期间发生错误,导致应用程序不能正常执行的事件,例如:数组越界访问、空指针引用等。在OC中,异常时指通过在方法内部 raise 一个异常对象实例来表示异常事件的。 异常处理 在OC中,我们可以通过以下两个关键字来处理异常: @try: 被检测的代码中可能发生异常的部分需要放在这个语句块里; @cat…

    C 2023年5月23日
    00
  • C++如何切割String对象的方法

    C++有多种方法可以切割String对象,下面介绍其中两种。 方法一:使用stringstream stringstream是一个可用于输入和输出的字符串流类。可以通过向其写入字符串,再从中读取字符串,实现将字符串按照指定分隔符进行切割的功能。 示例代码如下: #include <iostream> #include <string>…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部