VS Code 配置 Microsoft C++ 工作環(huán)境

在本教程中, 您將 VS Code 配置為在Windows 上使用 Microsoft Visual C++ 編譯器和調(diào)試器. 配置VS Code 之后整份, 將在VS Code 中編譯和調(diào)試一個(gè)簡單的 Hello World 程序.

先決條件

為成功完成本次配置過程待错, 您必須執(zhí)行以下操作:

  1. 安裝 VS Code.

  2. 安裝 C/C++ extension for VS Code. 您可以通過在"擴(kuò)展"視圖中搜索."c++"來安裝c/c++擴(kuò)展(Ctrl + Shift + X).


    cpp-extension.png
  3. 安裝 Microsoft Visual C++(MSVC)編譯工具鏈.

    如果您使用的是Visual Studio的最新版本籽孙,請從Windows的“開始”菜單中打開"Visual Studio安裝程序",并驗(yàn)證是否選中了C ++工作負(fù)載火俄。如果尚未安裝犯建,請選中該復(fù)選框,然后在安裝程序中單擊“修改”按鈕.
    您也可以僅安裝C ++ Build Tools瓜客,而無需完整安裝Visual Studio IDE.在 "Visual Studio 下載" 頁面中适瓦,向下滾動(dòng),直到在 "所有下載" 部分下看到"Visual Studio工具"谱仪,然后選擇"Build Tools for Visual Studio"的下載.

build-tools-for-vs.png

這將啟動(dòng)Visual Studio安裝程序玻熙,該程序?qū)棾鲆粋€(gè)對話框,顯示可用的Visual Studio Build Tools工作負(fù)載. 檢查C ++生成工具的工作量疯攒,然后選擇"安裝".

cpp-build-tools.png

檢查您的Microsoft Visual C++ 安裝

要從命令行或VS Code使用MSVC嗦随,必須從Visual Studio的開發(fā)人員命令提示符運(yùn)行. 普通的Shell(例如PowerShell,Bash或Windows命令提示符)沒有設(shè)置必要的路徑環(huán)境變量.
啟動(dòng) Visual Studio 開發(fā)人員命令提示符, 從開始菜單下的快速搜索區(qū)域敬尺, 搜索 “vs 2017” 或 "開發(fā)人員" 就可以找到開發(fā)人員命令提示符.

findvscmd.png

您可以通過鍵入“ cl”來測試您是否正確安裝了C ++編譯器cl.exe枚尼,并且應(yīng)該看到版權(quán)消息以及其版本和基本用法說明.

vs2017_develper.png

"code”命令在當(dāng)前工作文件夾中打開VS Code,這將成為您的“工作區(qū)”砂吞。在閱讀本教程的過程中署恍,您將看到在工作區(qū)的.vscode文件夾中創(chuàng)建的三個(gè)文件.

  • Task.json (構(gòu)建說明)
  • Launch.json (調(diào)試器設(shè)置)
  • C_cpp_properties.json ( 編譯器路徑和IntelliSense設(shè)置)

添加源代碼文件

在文件資源管理器標(biāo)題欄中,選擇"新建文件"按鈕蜻直,并將文件命名為helloworld.cpp.

new-file-button.png

增加 helloworld.cpp 源代碼如下:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main()
{
    vector<string> msg { "Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
    for (const string& word :msg)
    {
        cout << word << "";
        cout << endl;
    }
}

現(xiàn)在按 Ctrl + S 保存文件. 請注意盯质,剛添加的文件如何顯示在VS Code側(cè)欄中的文件資源管理器視圖(Ctrl + Shift + E)中.

file-explorer.png

在左邊的工具欄中, 還有其他的一些功能概而, 如搜索呼巷、源碼控制, 和調(diào)試. 在后面的章節(jié)中您就可以看到調(diào)試視圖. 您可以在VS Code 用戶界面文檔 中找到有關(guān)其他視圖的更多信息.

探索智能感知

在新的helloworld.cpp文件中赎瑰,將鼠標(biāo)懸停在矢量或字符串上以查看類型信息朵逝。在聲明msg變量之后,開始鍵入msg. 就像調(diào)用成員函數(shù)時(shí)一樣. 您應(yīng)該立即看到一個(gè)顯示所有成員函數(shù)的完成列表乡范,以及一個(gè)顯示msg對象的類型信息的窗口.

msg-intellisense.png

您可以按Tab鍵插入選定的成員. 然后,當(dāng)您添加左括號時(shí)啤咽,您將看到有關(guān)該函數(shù)所需的任何參數(shù)的信息.

編譯helloworld.cpp

接下來晋辆,您將創(chuàng)建一個(gè)task.json文件,以告訴VS Code如何構(gòu)建(編譯)程序.該任務(wù)將調(diào)用Microsoft C ++編譯器以基于源代碼創(chuàng)建可執(zhí)行文件.

從主菜單中宇整,選擇“終端配置默認(rèn)生成任務(wù)”. 在下拉列表中瓶佳,將顯示任務(wù)下拉列表,其中列出了C ++編譯器的各種預(yù)定義構(gòu)建任務(wù).選擇cl.exe構(gòu)建活動(dòng)文件鳞青,它將構(gòu)建當(dāng)前在編輯器中顯示(活動(dòng))的文件.

build-active-file.png

這將在.vscode文件夾中創(chuàng)建一個(gè)task.json文件霸饲,并在編輯器中將其打開.

您的新task.json文件應(yīng)類似于以下JSON

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "cl.exe build active file",
      "command": "cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

command 設(shè)置指定要運(yùn)行的程序, 在這種情況下为朋,它就是"cl.exe". Args數(shù)組指定將傳遞給cl.exe的命令行參數(shù). 必須按照編譯器期望的順序指定這些參數(shù). 該任務(wù)告訴C ++編譯器獲取活動(dòng)文件($ {file}),對其進(jìn)行編譯厚脉,然后在當(dāng)前目錄($ {fileDirname})中創(chuàng)建一個(gè)與活動(dòng)文件同名的可執(zhí)行文件(/ Fe:switch). 但帶有.exe擴(kuò)展名($ {fileBasenameNoExtension} .exe)习寸,對于我們的示例將生成helloworld.exe.

標(biāo)簽值就是您將在任務(wù)列表中看到的值;您可以隨意命名.
組對象中的“ isDefault”:true值指定當(dāng)您按Ctrl + Shift + B時(shí)將運(yùn)行此任務(wù)傻工。此屬性僅出于方便起見霞溪;如果將其設(shè)置為false,您仍然可以使用“任務(wù):運(yùn)行構(gòu)建任務(wù)”從“終端”菜單中運(yùn)行它.

運(yùn)行構(gòu)建

  1. 返回helloworld.cpp, 準(zhǔn)備構(gòu)建 helloworld.cpp.
  2. 按 Ctrl + Shift + B 或從終端主菜單中選擇 "任務(wù):運(yùn)行構(gòu)建任務(wù)".
  3. 任務(wù)啟動(dòng)時(shí)中捆, 可以看到 "集成終端" 面板出現(xiàn)在源代碼編輯器下方. 任務(wù)完成后, 終端將顯示編譯器的輸出, 指示構(gòu)建成狗還是失敗. 對于成功的 C++ 構(gòu)建, 輸出看起來像這樣.
build-output-in-terminal_2.png
  1. 使用+按鈕創(chuàng)建一個(gè)新終端鸯匹,您將擁有一個(gè)新終端(運(yùn)行PowerShell),其中helloworld文件夾為工作目錄. 運(yùn)行l(wèi)s泄伪,現(xiàn)在您應(yīng)該看到可執(zhí)行文件helloworld.exe以及各種中間C ++輸出和調(diào)試文件(helloworld.obj殴蓬,helloworld.pdb).
helloworld-in-terminal.png
  1. 您可以通過輸入 .\helloworld.exe 在終端中運(yùn)行helloworld.

修改task.json

您可以使用"$ {workspaceFolder} \ *.cpp"之類的參數(shù)而不是$ {file}來修改task.json以構(gòu)建多個(gè)C ++文件。這將在當(dāng)前文件夾中生成所有.cpp文件蟋滴。您也可以通過將"$ {fileDirname} \ $ {fileBasenameNoExtension} .exe"替換為硬編碼的文件名(例如" $ {workspaceFolder}\myProgram.exe")來修改輸出文件名.

調(diào)試helloworld.cpp

接下來染厅,您將創(chuàng)建一個(gè)launch.json文件,以配置VS Code以在您按F5調(diào)試程序時(shí)啟動(dòng)Microsoft C ++調(diào)試器.從主菜單中脓杉,選擇"調(diào)試添加配置..."糟秘,然后選擇" C ++(Windows)".

build-and-debug-active-file.png

VS Code創(chuàng)建一個(gè)launch.json文件,在編輯器中將其打開球散,然后生成并運(yùn)行 "helloworld" .

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "cl.exe build and debug active file",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "preLaunchTask": "cl.exe build active file"
    }
  ]
}

程序設(shè)置指定要調(diào)試的程序. 在這里尿赚,它被設(shè)置為活動(dòng)文件文件夾$ {fileDirname}和活動(dòng)文件名,擴(kuò)展名為.exe $ {fileBasenameNoExtension} .exe蕉堰,如果helloworld.cpp是活動(dòng)文件凌净,則文件名為helloworld.exe.
默認(rèn)情況下,C ++擴(kuò)展不會在源代碼中添加任何斷點(diǎn)屋讶,并且stopAtEntry值設(shè)置為false冰寻。將stopAtEntry值更改為true,以使調(diào)試器在啟動(dòng)調(diào)試時(shí)在main方法上停止.

開始調(diào)試會話

  1. 返回 helloworld.cpp, 使其成為活動(dòng)文件.
  2. 按F5或從主菜單中選擇"調(diào)試開始調(diào)試".在開始瀏覽源代碼之前皿渗,讓我們花一點(diǎn)時(shí)間注意用戶界面中的一些更改.
  • 集成終端出現(xiàn)在源代碼編輯器的底部.在"調(diào)試輸出"選項(xiàng)卡中斩芭,您將看到指示調(diào)試器已啟動(dòng)并正在運(yùn)行的輸出.

  • 編輯器突出顯示main方法中的第一條語句. 這是C ++擴(kuò)展自動(dòng)為您設(shè)置的斷點(diǎn).

    stopAtEntry.png
  • 左側(cè)的 "調(diào)試" 視圖顯示調(diào)試信息.您將在本教程的后面看到一個(gè)示例.

  • 在代碼編輯器的頂部, 將顯示一個(gè)調(diào)試控制面板. 可以按住窗口邊緣并移動(dòng)倒合適的地方.

逐步執(zhí)行代碼

現(xiàn)在,您準(zhǔn)備開始逐步執(zhí)行代碼.

單擊或按調(diào)試控制面板中的“跳過”圖標(biāo)乐疆,直到突出顯示for(const string&word:msg)語句.

step-over-button.png

從左至右按鈕功能分別為 Continue 划乖、Step Over 、Step Into挤土、Step Out 琴庵、Restart 、Stop 調(diào)試功能.
這幾個(gè)功能的作用是 繼續(xù)執(zhí)行、跳出當(dāng)前塊迷殿、進(jìn)入當(dāng)前塊儿礼、重啟調(diào)試器、停止調(diào)試器.

觀察變量

有時(shí)庆寺,您可能希望在程序執(zhí)行時(shí)跟蹤變量的值. 您可以通過在變量上設(shè)置監(jiān)視來做到這一點(diǎn).

  1. 在觀察窗口中蚊夫, 通過按 "+" 按鈕,輸入待觀察的變量名止邮, 當(dāng)代碼運(yùn)行到變量名所在的塊時(shí)这橙, 可以觀察該值.
watch-window.png
  1. 當(dāng)斷點(diǎn)停留在某個(gè)塊時(shí), 可以在鼠標(biāo)移動(dòng)倒特定的變量上, 可以快速的觀察該變量的值.
mouse-hover.png

C/C++ 配置

如果您想進(jìn)一步控制C / C ++擴(kuò)展,可以創(chuàng)建一個(gè)c_cpp_properties.json文件导披,該文件可讓您更改設(shè)置屈扎,例如編譯器的路徑,包含路徑撩匕,C ++標(biāo)準(zhǔn)(默認(rèn)為C ++ 17).
您可以通過運(yùn)行命令C / C ++:從命令面板(Ctrl + Shift + P)編輯配置(UI)來查看C / C ++配置UI.

command-palette.png

這將打開“ C / C ++配置”頁面. 當(dāng)您在此處進(jìn)行更改時(shí)鹰晨,VS Code會將其寫入.vscode文件夾中名為c_cpp_properties.json的文件中.

configurations-ui.png

Visual Studio Code將這些設(shè)置放在.vscode\c_cpp_properties.json中. 如果直接打開該文件,則它應(yīng)如下所示.

{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "windowsSdkVersion": "10.0.18362.0",
      "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "msvc-x64"
    }
  ],
  "version": 4
}

僅當(dāng)程序包含不在工作空間或標(biāo)準(zhǔn)庫路徑中的頭文件時(shí)止毕,才需要添加到"包含路徑數(shù)組"設(shè)置中.

重用C++配置

VS Code現(xiàn)在已配置為使用Microsoft C ++編譯器. 該配置適用于當(dāng)前工作空間模蜡。要重用配置,只需將JSON文件復(fù)制到新項(xiàng)目文件夾(工作區(qū))中的.vscode文件夾扁凛,然后根據(jù)需要更改源文件和可執(zhí)行文件的名稱.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忍疾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谨朝,更是在濱河造成了極大的恐慌卤妒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件字币,死亡現(xiàn)場離奇詭異则披,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)洗出,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門士复,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翩活,你說我怎么就攤上這事阱洪。” “怎么了菠镇?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵澄峰,是天一觀的道長。 經(jīng)常有香客問我辟犀,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任堂竟,我火速辦了婚禮魂毁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘出嘹。我一直安慰自己席楚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布税稼。 她就那樣靜靜地躺著烦秩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郎仆。 梳的紋絲不亂的頭發(fā)上只祠,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音扰肌,去河邊找鬼抛寝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛曙旭,可吹牛的內(nèi)容都是我干的盗舰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼桂躏,長吁一口氣:“原來是場噩夢啊……” “哼钻趋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剂习,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蛮位,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后进倍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體土至,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年猾昆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陶因。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垂蜗,死狀恐怖楷扬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贴见,我是刑警寧澤烘苹,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站片部,受9級特大地震影響镣衡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一廊鸥、第九天 我趴在偏房一處隱蔽的房頂上張望望浩。 院中可真熱鬧,春花似錦惰说、人聲如沸磨德。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽典挑。三九已至,卻和暖如春啦吧,著一層夾襖步出監(jiān)牢的瞬間您觉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工丰滑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顾犹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓褒墨,卻偏偏與公主長得像炫刷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子郁妈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345