vscode编译运行以及配置debug C/C++

vscode 使用脚本编译C/C++

关于gcc / g++ 编译命令

  • 详细内容参考这篇博客
  • 这里介绍常用的命令:
    • 假设你的C文件叫做ff.c,那么编译他的命令就是gcc ff.cpp -o ff,这时你的源程序目录下就会生成可执行文件ff.exe
    • 再在终端下执行ff(cmd)或./ff(powershell)就可以运行
    • 指定编译的C语言标准:-std=c11(设为c11标准)
    • 静态编译:-static
    • 开启O2级别优化:-O2

使用.bat脚本实现自动化编译运行

  • 首先若要在vscode的集成的终端中运行文件,必须以打开文件夹的方式编写你的程序
  • 假设你的文件夹的绝对路径是C:\Users\ff\Desktop,那么我们的.bat文件也要放在这个目录下。
  • 下面是我的.bat文件的示例
1
2
3
4
@echo off
cd C:\Users\ff\Desktop\ff
gcc test.c -o test -std=c11 -O2
test

bat

  • 下面是简单的解释:

    • 关闭命令回显

    • 打开工作目录(替换成你的工作目录)

      show

    • 以c11标准 O2优化编译test.c文件(替换成你自己的.c文件) 并声称test.exe可执行文件

    • 运行test.exe

  • 将上面的文件保存在你的目录下,命名为run.bat,在vscode中按ctrl+` 打开终端

  • 输入run(cmd)或./run(powershell)即可运行查看结果

    run

结合分屏的输入输出重定向方法

  • 很多时候我们需要向程序输入大量的数据,一个个手动输入就会特别繁琐,因此我们需要学习将输入输出重定向到文件中,这样只要一次将输入写入文件,此后就不需要再次输入重复的内容了。

vscode的分屏功能

  • ctrl+\开启分屏功能,vscode中最多可以分左中右三屏,我们在文件夹下创建两个文件in.txtout.txt分别作为输入和输出被重定向的文件,并分别在左右屏打开,如图所示

split

  • 向左移动编辑器组的快捷键是ctrl+k leftarrow,向右为ctrl+k rightarrow

  • 三个屏从左到右依次标号为1、2、3,切换焦点到对应的编辑器的快捷键为ctrl+1/2/3

    key

重定向输入输出

freopen

1
2
3
4
5
6
int main() {
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
// your code
}
  • 将上面两句freopen加到main函数的最前面即可,关于文件读写的其他操作欢迎关注后续的博客。

运行时重定向

  • 上述做法有一个明显的弊端——算法竞赛时需要从标准的输入输出来读取,因此我们在本地测试完提交自己的代码到OJ上面时需要注释掉这两句话,而新手甚至老手都会常常忘记这一点,造成无谓的WA,因此需要下面的方法。

  • run.bat中运行test.exe的命令test后加上<in.txt >out.txt即可,效果如图:

    run2

vscode配置C/C++ debug

配置launch.json文件

  • 在左侧栏中选择第四项打开debug侧栏,点击上方的绿色箭头,会弹出选择环境,选择C++(GDB/LLDB),提示没有配置,选择打开launch.json,选择C++(GDB/LLDB)

  • 将下面的内容复制到你的文件中,并按注释修改相关内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    {
    "version": "0.2.0",
    "configurations": [
    {
    "name": "C++ Launch (GDB)", // 配置名称,将会在启动配置的下拉菜单中显示
    "type": "cppdbg", // 配置类型,这里只能为cppdbg
    "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
    "launchOptionType": "Local", // 调试器启动类型,这里只能为Local
    "targetArchitecture": "x86", // 生成目标架构,一般为x86或x64,可以为x86, arm, arm64, mips, x64, amd64, x86_64
    "program": "${file}.exe", // 将要进行调试的程序的路径
    "miDebuggerPath":"C:\\MinGW\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
    "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
    "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
    "cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}即代码所在目录
    "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
    "preLaunchTask": "gcc"   // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
    }
    ]
    }

配置task.json文件

  • 再次点击绿色箭头,点击配置任务运行程序,任意选择一项生成命令,编辑task.json文件如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {
    "version": "0.1.0",
    "command": "gcc",
    "args": ["-g","${file}","-o","${file}.exe"], // 编译命令参数
    "problemMatcher": {
    "owner": "cpp",
    "fileLocation": ["relative", "${workspaceRoot}"],
    "pattern": {
    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
    "file": 1,
    "line": 2,
    "column": 3,
    "severity": 4,
    "message": 5
    }
    }
    }
  • 这时再点击绿色小箭头,或在.c文件处于焦点状态时(即光标在.c)文件处按F5即可出现如下图的调试界面

    debug

  • 至此我们的配置工作全部完成

常用快捷键

  • 下一步F10
  • 单步运行F11
  • 停止Shift+F5
本博客收到的所有打赏均将用于博主女朋友的化妆品购买及养胖计划