工具使用教程(四) 【VSCode使用教程】

简介: 工具使用教程(四) 【VSCode使用教程】

  从VSCode转到Clion,再到Xcode,再到VSCode,我可太难了。。。

基于g++命令

单文件编译

  在写好代码之后,找到VSCode的菜单栏的终端,新建一个终端,之后我们就可以在终端中对所编写的代码进行编译操作了:

  可以看到g++编译之后会生成一个a.exe文件,这里生成的a.exe文件是不包含调试信息的。并且我们可以将其命名为别的名字。通过参数控制。g++编译单文件,生成带调试信息的可执行文件、并调式:

g++ -g .\main.cpp -o my_swap
• 1

  - g参数代表生成带调试信息的可执行文件,- o表示指定输出文件名。只有生成的是带调试信息的可执行文件,才可以被调试。

  如果需要调试代码,需要去选择创建launch.json文件。步骤如下:1. 选中最左侧的运行和调试按钮。2. 点击create a launch.json file。3. 选择C++(GDB/LLDB) (因为我们选择gcc软件里面的gdb调试工具)。4. 选择g++.exe-生成和调试活动文件

之后就会生成launch.json文件,并进入调试。并且会给你生成一个与main.cpp同名的main.exe文件,也就是说编译器帮助我们做了很多事情。

  在launch.json文件中,最为关键的两条信息就是"program":"preLaunchTask":

  "program":代表的是需要调试的可执行文件。想要对一个可执行文件进行调试,首先需要去生成这个可执行文件。"preLaunchTask":表示的是调试之前需要做的工作,其实就是要去生成调试需要的可执行文件。这个生成文件的配置工作在tasks.json文件中:

多文件编译

  把swap函数放到一个头文件中声明,和一个.cpp文件中去实现。

  g++编译多文件,生成带调试信息的可执行文件、并调试:

g++ -g .\main.cpp .\swap.cpp -o my_multi_swap
• 1

  此时如果和单个文件一样,去调试的话,就会报错:preLaunchTask"C/C+ +: g+ +.exe生成活动文件"已终止,退出代码为-1.

  这是因为,想要调试多个文件,我们需要自己去配置launch.json文件和tasks.json文件。因为我们已近生成了my_multi_swap.exe文件,所以我们直接配置"program":所指定的路径即可:

  此时就能进入调试了。

  在配置单个文件的时候,VSCode都帮助我们做了生成可调试文件的工作。如果是需要编译多个文件我们需要使用g++手动编译一下,生成我们所需要的exe文件,然后修改launch.json文件,将生成的exe文件路径添加进来。

基于cmake

  cmake是一款非常好的工具,它可以帮助我们生成makefilemakefile是什么呢?如果我们需要编译一个大型的工程的话,它会帮助我们指定编译规则,但是它的makefile书写起来非常地困难。所以cmake这个工具就产生了,它能够帮助我们生成极为复杂的makefile

  如果想要将我们的工程构建为cmake工程的话,我们需要在文件主目录里面创建CMakeLists.txt

  编写最简单的CMakeLists.txt(安装cmake插件后会有智能提示):

project(MYSWAP) 
add_executable(my_cmake_swap main.cpp swap.cpp)

  MYSWAP是工程名字,add_executable有两个参数,my_cmake_swap表示生成的可执行文件的名字,通过main.cpp swap.cpp这两个文件生成。ctrl shit p进入配置,输入cmake,选择下图中的第一个CMake:Configure,之后在选择GCC后面接自己的版本号的那一个即可:

  点击完之后会生成一个build文件夹,是cmake进行外部构建的一个build文件夹。

  想要通过CMakeLists.txt生成可执行文件,我们需要在终端中输入一些指令。我们需要进入刚刚生成的build文件夹下,输入cmake ..

  看到上述红色方框中出现的显示,说明说有的步骤都是正常的。之后需要输入make命令,但是windows下的makelinux下的make名字可能不一样:

building是把两个cpp编译成二进制文件,linking是把exe连接起来。

  想要拿到刚刚生成的文件进行调试的话,我们同样需要去配置launch.json文件即可:

  更多参考:

mkdir build

cd build

如果电脑上已经安装了vs,可能会调用微软MSVC编译器,使用(cmake -G “MinGW Makefiles” …)代替cmake …即可

仅第一次使用cmake时使用(cmake -G “MinGw Makefiles” …) 后面可使用(cmake …)

cmake …

ming32-make.exe // 或者是make

配置json

launch.json

  • launch.json : for debug

  代码改动之后,我们需要重新生成可执行文件,然后调试,但是我们如果一直在终端里面去生成可执行文件的话,效率就太低了。因为代码改动一次,就需要去重新生成一次可执行文件。因此我们需要将preLaunchTask打开(删除注释//),并配置其相关信息:

  ctrl shift p,输入task,选择config task可以进行模板创建:

  或者选中代码区域,右键去生成和调试活动文件。

tasks.json

  • tasks.json : for build before debug
  1. g++编译方式配置tasks.json

  command的含义就是g++,之后带两个文件的参数,然后是输出文件的路径,直接给绝对路径是最保险的:

  或者使用相对路径:

  附上launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/out.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "D:\\install_hezhiqiang\\MinGW\\bin",
            "environment": [],
            "externalConsole": true,
            // "console": "externalTerminal",
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\install_hezhiqiang\\MinGW\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件"
        }
    ]
}

  附上tasks.json

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\install_hezhiqiang\\MinGW\\bin\\g++.exe",
            "args": [
                "-g",
                "${workspaceFolder}\\main.cpp",
                "${workspaceFolder}\\swap.cpp",
                "-o",
                "${workspaceFolder}\\out.exe"
            ],
            "options": {
                "cwd": "D:\\install_hezhiqiang\\MinGW\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}
  1. cmake方式配置tasks.json

  如果是cmake工程的话,想用task.json执行cmake的编译命令呢?task.json可以帮助我们去完成调试之前的编译工作,将其编译命令对应到task.json里面如下:

  附上launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/my_cmake_swap.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "D:\\install_hezhiqiang\\MinGW\\bin",
            "environment": [],
            "externalConsole": true,
            // "console": "externalTerminal",
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\install_hezhiqiang\\MinGW\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build"
        }
    ]
}

  这里要注意"program": "${workspaceFolder}/build/my_cmake_swap.exe"

  附上tasks.json

{
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build"
    },
    "tasks": [
        {
            "type": "shell",
            "label": "cmake",
            "command": "cmake",
            "args": [
                ".."
            ]
        },
        {
            "label": "make",
            "group":{
                "kind": "build",
                "isDefault": true
            },
            "command": "make",
            "args": [
            ]
        },
        {
            "label": "Build",
            "dependsOn":[
                "cmake",
                "make"
            ]
        }
    ]
}

  最后推荐大家使用cmake方式构建工程。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
6月前
|
搜索推荐 C++ 开发者
VSCode安装使用教程,保姆级!
本文介绍了Visual Studio Code(VS Code)的安装和基本使用,包括从官网下载安装包,按照步骤在Windows系统上安装,以及设置个性化主题。此外,还强调了安装插件以增强功能,例如安装简体中文插件,并展示了如何搜索和安装插件。VS Code作为一个免费、开源的轻量级编辑器,其丰富的扩展性和高效性使其成为开发者工具的首选。
|
25天前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
44 8
|
1天前
|
前端开发 搜索推荐 C++
Marp 教程:如何在 VSCode 中引入自定义样式和主题
本文介绍了如何在 Marp 中引入自定义样式和主题,使你的幻灯片更加个性化和独特。首先,你需要安装 VSCode 和 Marp 插件,了解 Marp 的基本结构。接着,通过创建自定义 CSS 文件并在 Markdown 文件中引入,实现样式定制。此外,还可以创建和使用自定义主题,以及进行高级自定义,如调整布局、引入自定义字体和定义复杂动画。最后,使用 Marp 的预览功能实时查看效果。
9 0
|
1天前
|
前端开发 C++
Marp 教程:使用 VSCode 编写专业 PPT
Marp 是一款基于 Markdown 的幻灯片制作工具,结合 VSCode 的强大编辑功能,可让你高效地创建专业 PPT。本教程将指导你如何在 VSCode 中安装 Marp 插件、配置主题和样式,并使用 Markdown 语法创建和美化幻灯片。内容包括基本结构、布局、图片与图表插入、表格制作,以及高级功能如动画效果、数学公式和代码高亮。最后,你将学会如何预览和导出幻灯片。
10 0
|
2月前
|
编译器 C语言 C++
VSCode安装配置C语言(保姆级教程)
VSCode安装配置C语言(保姆级教程)
|
2月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
338 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
7月前
|
IDE C# 开发工具
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
219 6
|
4月前
|
JavaScript 前端开发 编译器
TypeScript教程(一)在vscode中的配置TypeScript环境
本文是一篇TypeScript入门教程,介绍了在VS Code中配置TypeScript环境的步骤,包括安装Node.js、使用npm安装TypeScript、配置npm镜像源、安装VS Code的TypeScript扩展,以及创建和运行一个简单的TypeScript "Hello World"程序。
TypeScript教程(一)在vscode中的配置TypeScript环境
|
5月前
vscode 生成项目目录结构 directory-tree 实用教程
vscode 生成项目目录结构 directory-tree 实用教程
350 2
|
6月前
|
JSON Ubuntu JavaScript
工具分享:VsCode注释神器,koro1FileHeader
工具分享:VsCode注释神器,koro1FileHeader
217 3