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++线程池是一种常用的并发编程技术,它允许我们创建一组固定数量的线程并维护它们,以便在需要时可以立即使用它们来执行任务。下面是一个C++线程池的简单实现方法: 定义任务队列 首先,我们需要定义一个任务队列,用于存储等待执行的任务。任务队列可以是一个简单的std::queue对象,用于存储任务函数。 std::queue<std::function&l…

    C 2023年5月22日
    00
  • 对python中Json与object转化的方法详解

    下面是“对Python中Json与Object转化的方法详解”的完整攻略。 1. Json与Object转化的背景 在Python中,常常需要处理Json数据以及Json字符串与Python对象之间的转化。在实际开发中,我们通常会使用如下的数据格式: { "name": "张三", "age": 1…

    C 2023年5月23日
    00
  • Qt基础开发之Qt多线程类QThread与Qt定时器类QTimer的详细方法与实例

    首先我们来讲解一下Qt多线程类QThread的使用方法: Qt多线程类QThread的使用方法 1. 创建继承自QThread的子类 在Qt中我们通常使用继承自QThread的子类来创建新的线程。首先我们需要在头文件中#include ,然后创建一个新类,继承自QThread。在新类的run()函数中实现线程的具体逻辑。 示例代码: #include &lt…

    C 2023年5月22日
    00
  • mysql8.0 JSON_CONTAINS的使用说明

    mysql8.0 JSON_CONTAINS函数详解 简介 JSON_CONTAINS()函数用于检查是否存在指定JSON值。在MySQL8.0中,可以用该函数判断JSON数组或对象是否包含某个JSON值。 该函数返回值boolean类型,如果待查找的JSON存在于目标JSON中,则返回1,否则返回0。 JSON_CONTAINS()函数的完整语法如下: J…

    C 2023年5月23日
    00
  • SQL Server中实现错误处理

    当在 SQL Server 中执行复杂的 Transact-SQL(T-SQL)语句时,错误处理就变得至关重要。良好的错误处理使得程序更加健壮和可靠,因为它可以及时发现错误并采取相应的措施来处理错误。 以下是 SQL Server 中实现错误处理的完整攻略: 使用 TRY-CATCH 语句TRY-CATCH 语句是一种常用的实现错误处理的方式。它包含以下两个…

    C 2023年5月23日
    00
  • python对象与json相互转换的方法

    Python对象和JSON之间的互相转换是Web开发中经常使用的操作。这里提供两种方法,帮助你完成Python对象和JSON之间的转换。 方法一:使用Python内置的json模块 Python内置的json模块可以方便地将Python对象转换为JSON格式,反之同样适用。 将Python对象转换为JSON:使用json.dumps()函数,该函数接收一个P…

    C 2023年5月23日
    00
  • C++如何实现定长内存池详解

    C++实现定长内存池的详细攻略如下: 什么是定长内存池 定长内存池是一种用于管理内存分配和释放的方法。相对于动态内存分配和释放,定长内存池可以更高效地管理内存,因为它不需要频繁地进行内存分配和释放操作,而是预先分配一块连续的内存空间,然后在此基础上进行内存管理。 定长内存池的实现方法 在C++中,我们可以使用标准库中的std::vector或者自己实现一个内…

    C 2023年5月23日
    00
  • 详解Qt中线程的使用方法

    详解Qt中线程的使用方法 为什么需要使用线程? 在图形界面应用程序开发中,为了避免用户与界面卡住,我们常常需要将耗时的任务放到新的线程中执行。这样可以让界面不卡住,从而更好的提升用户体验。 Qt中线程的使用方法 Qt中线程的使用方法主要可以分为两种:继承QThread类和继承QRunnable接口。 继承QThread类 继承QThread类是一种常见的线程…

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