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