VS Code 编译及调试环境配置
lauch.json: 用于设置调试、运行时的环境,在右侧选三角形符号,创建launch.json文件,选择选择C++(GDB/LLDB)
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 强制:就一个名字而已,但是是必须要有的
"type": "cppdbg", // 强制:调试器的类型,Node debugger for node, php for PHP , go for GO
"request": "launch", // 强制:launch/attach
"program": "${workspaceFolder}/${fileBasenameNoExtension}.out", // 可执行文件的路径
一般仅修改这里,改变需要调试的可执行文件
"miDebuggerPath": "/usr/bin/gdb", // 调试器的位置
"preLaunchTask":"build", // 调试前编译任务名称
"args": [], // 调试参数
"stopAtEntry": false,
"cwd": "${workspaceFolder}", // 当前工作目录
"environment": [], // 当前项目环境变量
"externalConsole": true,
"MIMode": "gdb", // 调试器模式/类型
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
tasks.json: 用于设置编译时的环境,ctrl shift p —>输入tasks:configure Task—>点击C/C++ g++.exe build active file
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks":[ // 可以有多个任务
{
"label": "build", // 编译任务名
"type": "shell", // 编译任务的类型,通常为shell/process类型
"command": "g++", // 编译命令
"args":[
"-g", // 该参数使编译器在编译的时候产生调试信息
"${workspaceFolder}/${fileBasename}", // 被编译文件,通常为.cpp/.c/.cc文件等
"-I", // include path指令
"/usr/include",
"-L", // lib路径
"/usr/lib/x86_64-linux-gnu",
"-l", // 链接库文件1
"opencv_core",
"-l", // 链接库文件2
"opencv_highgui",
"-o", // 生成指定名称的可执行文件
"${workspaceFolder}/${fileBasenameNoExtension}.out"
/* -g hello.cpp -I/usr/include -L/usr/lib/x86_64-linux-gnu -lopencv_core -o hello.out */
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "cmakebuild",
"type": "shell",
"command": "cd build && cmake ../ && make", // shell 编译命令,做并运算,即前一命令执行失败,则后一命令也不执行
"args": []
}
]
}
c_cpp_properties.json:ctrl shift p —>configurations.json 基本不用设置,注意compilerPath路径是否是你想要的
{
"configurations": [
{
"name": "Linux", //配置名称,默认为系统名,可以自行更改
"includePath": [ //(常用)运行项目包含.h头文件的目录,
"${workspaceFolder}/**"//此处会匹配工作文件下的所有文件
], //添加"compilerPath"后,系统include路径可不写明
"defines": [], //(常用)定义一些需要的变量,等价于在编译时写"-D变量"
"compilerPath": "/usr/bin/gcc", //编译器的路径
"cStandard": "gnu17", //C标准的版本
"cppStandard": "gnu++14", //C++标准的版本
"intelliSenseMode": "gcc-x64" //IntelliSense的一些配置,默认即可
}
],
"version": 4
}
自动创建launch.json和tasks.json步骤:
1.C文件创建完成后,点击左侧三角形或者选择运行中的添加配置,选择选择第一项"C++ (GDB/LLDB)"(Windows那个是给MSVC编译器用的,MingGW需要使用GDB),
2.接下来选择默认的"gcc.exe - 生成和调试活动文件"(或"g++.exe - 生成和调试活动文件",具体取决于之前编译器路径的配置)
3.接下来会自动创建launch.json文件,进入调试模式
4.代码会被自动编译,并自动以调试模式执行一遍生成的程序。如果代码没什么问题,且未设置任何断点或等待外部输入的代码,
这个黄框一般只会闪现一下,程序一结束就会回归正常。
但注意如果代码中存在等待键盘输入的代码(比如scanf()这类),调试界面就会卡住而不会自动退出(因为你要输入的东西还没输呢)。
由于程序是在“终端”里执行的,要输入内容的话需要先切换到“终端”
预定义变量的意义解释
${workspaceFolder} :表示当前workspace文件夹路径,如C:\Users\admin\Desktop\test
${workspaceRootFolderName}:表示workspace的文件夹名,如test
${file}:文件自身的绝对路径,如C:\Users\admin\Desktop\test\.vscode\launch.json
${relativeFile}:文件在workspace中的路径,如.vscode\launch.json
${fileBasenameNoExtension}:当前文件的文件名,不带后缀,如hello/launch
${fileBasename}:当前文件的文件名,如 hello.cpp/launch.json等
${fileDirname}:文件所在的文件夹路径,也即C:\Users\admin\Desktop\test\.vscode
${fileExtname}:当前文件的后缀,也即.json
${lineNumber}:当前文件光标所在的行号
${env:PATH}:系统中的环境变量
1、c_cpp_properties.json一般用于添加包含路径,方便程序员编写代码时直接引用外部文件。该文件对编写代码有用,引用文件时不会提示错误,但对运行代码用处不大。
2、launch.json用于调试运行代码。tasks.json用于编译代码。
3、settings.json是runcode的配置文件,用于直接点击运行代码。
1) 预编译
将.c 文件转化成 .i文件
使用的gcc命令是:gcc –E
对应于预处理命令cpp
2) 编译
将.c/.h文件转换成.s文件
使用的gcc命令是:gcc –S
对应于编译命令 cc –S
3) 汇编
将.s 文件转化成 .o文件
使用的gcc 命令是:gcc –c
对应于汇编命令是 as
4) 链接
将.o文件转化成可执行程序
使用的gcc 命令是: gcc
对应于链接命令是 ld
总结起来编译过程就上面的四个过程:预编译处理(.c) --> 编译、优化程序(.s、.asm)--> 汇编程序(.obj、.o、.a、.ko) --> 链接程序(.exe、.elf、.axf等)