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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM