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}:系统中的环境变量

 

.vscode下的配置文件:
1、c_cpp_properties.json一般用于添加包含路径,方便程序员编写代码时直接引用外部文件。该文件对编写代码有用,引用文件时不会提示错误,但对运行代码用处不大。
2、launch.json用于调试运行代码。tasks.json用于编译代码
3、settings.json是runcode的配置文件,用于直接点击运行代码
 
使用VSCode时,最好确保VSCode与.c的工作目录一致,即将.c放在根目录下,但是当工程大时,应将头文件与源文件分开在不同的文件夹下进行管理,有如下两种方式引入头文件:
1.在头文件中#include "C:/Users/Administrator/Desktop/TEST/include/test.h",加入绝对路径,才可以找到头文件
注意:在windows系统下,路径的符号时“/” 或者 “\\”,而在linux下只能是“/”
2.若工作目录不一致,引用外部文件时最好使用绝对地址,运行时需注意在settings.json或tasks.json添加.h所在文件夹路径。只在c_cpp_properties.json添加.h所在文件夹路径,最多是在写代码不提示包含路径错误而已,对运行代码时引用外部文件不起作用。注意:我在测试时,只修改c_cpp_properties.json(在include path中加入头文件路径),点击run code 和调试运行 均失败,修改了tasks.json(在args中,加入
           "-I",
            "C:/Users/Administrator/Desktop/TEST/include",
,即配置编译依赖路径)后,点击run code失败,调试运行成功,而且生成了可执行文件test.exe,在终端输入“./test.exe”运行成功
,确定是setting.json配置错误,但未找到修改方法。也可以
在终端输入g++ -c test.cpp -I C:\Users\Administrator\Desktop\TEST\include,生成test.o文件,
然后输入g++ test.o -o test,生成可执行文件test.exe,
最后在终端输入“./test.exe”运行成功。


编译原理:分为编译和链接,编译:将源文件经编译器转换成汇编代码.s,汇编代码经汇编器转换成目标代码.o,然后其他目标文件,生成的.o文件,其他库文件经过链接最终成功可执行文件.exe

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等)

posted @ 2021-11-23 17:01  帝企鹅日记  阅读(1219)  评论(0编辑  收藏  举报