為Microsoft C ++配置VSCode

來源:https://code.visualstudio.com/docs/cpp/config-msvc
100% google翻譯

在本教程中走净,您將Visual Studio Code配置為在Windows上使用Microsoft C ++編譯器和調(diào)試器。配置VS Code之后孤里,您將編譯并調(diào)試一個(gè)簡(jiǎn)單的程序以熟悉VS Code用戶界面伏伯。完成本教程后,您將準(zhǔn)備創(chuàng)建和配置自己的工作區(qū)捌袜,并瀏覽VS Code文檔以獲取有關(guān)其許多功能的更多信息说搅。本教程不會(huì)教您有關(guān)Windows或Microsoft C ++工具集或C ++語言的詳細(xì)信息。對(duì)于這些主題虏等,Web上有許多不錯(cuò)的資源弄唧。

如果您有任何問題,請(qǐng)隨時(shí)在VS Code文檔庫中提交本教程的問題霍衫。

先決條件

要成功完成本教程套才,您必須執(zhí)行以下操作:

  1. 安裝Visual Studio代碼

  2. 為VS Code安裝C ++擴(kuò)展慕淡。

  3. 安裝Microsoft C ++(MSVC)編譯器工具集背伴。

    • 如果您使用的是Visual Studio的最新版本,請(qǐng)從Windows的“開始”菜單中打開“ Visual Studio安裝程序”,并驗(yàn)證是否選中了C ++工作負(fù)載傻寂。如果尚未安裝息尺,請(qǐng)選中該框,然后在安裝程序中單擊“ 修改”按鈕疾掰。
    • 或者搂誉,通過單擊“ 下載”頁面上的“ Visual Studio構(gòu)建工具”鏈接來下載獨(dú)立工具集,然后按照提示進(jìn)行操作静檬。使用默認(rèn)設(shè)置炭懊,下載大小約為1GB,磁盤大小約為4GB拂檩。如果您不需要CMake支持(及其依賴的Windows SDK)侮腹,則磁盤上的大小應(yīng)約為3GB。

從開發(fā)人員命令提示符啟動(dòng)VS代碼

要在VS Code中使用MSVC稻励,必須從Visual Studio開發(fā)人員命令提示符啟動(dòng)VS Code 父阻。普通的Windows命令提示符或Bash提示符沒有設(shè)置必要的環(huán)境變量。

  1. 要打開VS的Developer Command Prompt望抽,請(qǐng)開始在Windows“開始”菜單中鍵入“ Developer”加矛,您應(yīng)該看到它出現(xiàn)在建議列表中。確切名稱取決于您安裝的Visual Studio或Visual Studio Build Tools版本煤篙。單擊該項(xiàng)目以打開提示斟览。
  1. 在開發(fā)人員命令提示符下,創(chuàng)建一個(gè)名為“ projects”的空文件夾辑奈,您可以在其中存儲(chǔ)所有VS Code項(xiàng)目趣惠,然后創(chuàng)建一個(gè)名為“ helloworld”的子文件夾,導(dǎo)航至code該文件夾身害,并.通過輸入以下內(nèi)容在該文件夾()中打開VS Code()。以下命令:
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

代碼草戈。命令在當(dāng)前工作文件夾(即您的工作空間)中打開VS Code 塌鸯。在獲得IntelliSense支持或編譯和調(diào)試代碼之前,我們必須為MSVC配置VS Code唐片。完成配置后丙猬,我們將在.vscode子文件夾中包含三個(gè)文件:

  • c_cpp_properties.json (編譯器路徑和IntelliSense設(shè)置)
  • tasks.json (制作說明)
  • launch.json (調(diào)試器設(shè)置)

配置編譯器路徑

  1. 按Ctrl + Shift + P打開命令面板》丫拢看起來像這樣:
  1. 開始鍵入“ C / C ++”茧球,然后從建議列表中選擇“ 編輯配置”(UI)。這將打開“ C / C ++配置”頁面星持。當(dāng)您在此處進(jìn)行更改時(shí)抢埋,VS Code會(huì)將其寫入到c_cpp_properties.json.vscode文件夾中的文件中。
  1. 找到編譯器路徑設(shè)置。VS Code會(huì)根據(jù)在系統(tǒng)上找到的內(nèi)容嘗試使用默認(rèn)編譯器填充它揪垄。它首先查找MSVC編譯器穷吮,然后在Windows Subsystem for Linux(WSL)上查找g ++,然后在Mingw-w64上查找g ++饥努。對(duì)于MSVC捡鱼,路徑應(yīng)類似于以下內(nèi)容,具體取決于您安裝的特定版本:“ C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe”酷愧。

    編譯器的路徑設(shè)置是配置中的最重要的設(shè)置驾诈。該擴(kuò)展使用它來推斷C ++標(biāo)準(zhǔn)庫頭文件的路徑。當(dāng)擴(kuò)展知道在哪里可以找到那些文件時(shí)溶浴,它可以在您編寫代碼時(shí)為您提供許多有用的信息乍迄。此信息稱為IntelliSense,您將在本教程的后面看到一些示例戳葵。

  2. IntelliSense模式設(shè)置為${default}就乓,在Windows上為msvc-x64

僅當(dāng)程序包含不在工作空間或標(biāo)準(zhǔn)庫路徑中的頭文件時(shí)拱烁,才需要修改“ 包含路徑”設(shè)置生蚁。

Visual Studio代碼將這些設(shè)置放在中.vscode/c_cpp_properties.json。如果直接打開該文件戏自,則其外觀應(yīng)如下所示(取決于您的特定路徑):

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

創(chuàng)建一個(gè)構(gòu)建任務(wù)

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

  1. 從主菜單中志衣,選擇“ 視圖”>“命令面板”,然后鍵入“任務(wù)”猛们,然后選擇“ 任務(wù):配置默認(rèn)構(gòu)建任務(wù)”念脯。在下拉列表中,選擇“ 從模板創(chuàng)建Task.json文件”弯淘,然后選擇“ 其他”绿店。VS Code創(chuàng)建一個(gè)最小tasks.json文件,并在編輯器中將其打開庐橙。

  2. 繼續(xù)假勿,并使用以下代碼片段替換整個(gè)文件內(nèi)容:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "msvc build",
      "type": "shell",
      "command": "cl.exe",
      "args": ["/EHsc", "/Zi", "/Fe:", "helloworld.exe", "helloworld.cpp"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "presentation": {
        "reveal": "always"
      },
      "problemMatcher": "$msCompile"
    }
  ]
}

label值將在VS Code命令面板中使用,并且可以是您喜歡的任何名稱态鳖。該command值表示我們正在使用cl.exeMSVC編譯器转培。該args數(shù)組指定將傳遞給上一步中指定的編譯器的命令行參數(shù)。它們必須以編譯器期望的順序出現(xiàn)浆竭。在此示例中浸须,我們指定異常處理模式(EHsc)惨寿,并告訴編譯器生成帶符號(hào)的調(diào)試版本(Zi)。該/Fe:參數(shù)告訴編譯器將可執(zhí)行文件命名為“ helloworld.exe”羽戒。

group值指定當(dāng)您按Ctrl + Shift + B時(shí)將運(yùn)行此任務(wù)缤沦。

配置調(diào)試設(shè)置

接下來,您將創(chuàng)建一個(gè)launch.json文件易稠,以配置VS Code以在按F5調(diào)試程序時(shí)啟動(dòng)調(diào)試器缸废。

  1. 從主菜單中,選擇“ 調(diào)試”>“添加配置...”驶社,然后選擇“ C / C ++ Windows(啟動(dòng))”企量。這將導(dǎo)致launch.json文件被創(chuàng)建和打開。用這個(gè)替換文件的內(nèi)容
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(msvc) Launch",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${workspaceFolder}/helloworld.exe",
      "args": [],
      "stopAtEntry": true,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false
    }
  ]
}

請(qǐng)注意亡电,程序名稱helloworld.exe與我們?cè)谥兄付ǖ拿Q匹配tasks.json届巩。

默認(rèn)情況下,C ++擴(kuò)展名在的第一行添加了一個(gè)斷點(diǎn)main份乒。該stopAtEntry值設(shè)置為true使調(diào)試器在該斷點(diǎn)處停止恕汇。false如果您希望忽略它,可以將其設(shè)置為或辖。

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

其余步驟作為可選練習(xí)提供耳鸯,以幫助您熟悉編輯和調(diào)試經(jīng)驗(yàn)湿蛔。

添加源代碼文件

  1. 在文件資源管理器中選擇“ HELLOWORLD”文件夾。右鍵單擊窗格县爬,然后從上下文菜單中選擇“ 新建文件 ”阳啥。命名文件helloworld.cpp。確保文件不在.vscode子文件夾中财喳。

  2. 粘貼此源代碼:

    #include <iostream>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    
        vector<string> msg {"Hello", "C++", "World", "from", "VS Code!"};
    
        for (const string& word : msg)
        {
            cout << word << " ";
        }
        cout << endl;
    }
    
  3. 現(xiàn)在按Ctrl + S保存文件〔斐伲現(xiàn)在注意,我們剛剛編輯的所有文件如何顯示在VS Code左側(cè)面板的File Explorer視圖中:

該面板還用于源代碼控制纲缓,調(diào)試,搜索和替換文本以及管理擴(kuò)展喊废。左側(cè)的按鈕控制這些視圖祝高。我們將在本教程的后面部分中查看調(diào)試視圖”。您可以在VS Code文檔中找到有關(guān)其他視圖的更多信息污筷。

探索智能感知

在新helloworld.cpp文件中工闺,將鼠標(biāo)懸停在vector或上string以查看類型信息乍赫。聲明msg變量后,開始msg.像調(diào)用成員函數(shù)時(shí)一樣鍵入內(nèi)容陆蟆。您應(yīng)該立即看到一個(gè)顯示所有成員函數(shù)的完成列表雷厂,以及一個(gè)顯示該msg對(duì)象的類型信息的窗口:

您可以按TAB鍵插入選定的成員。然后叠殷,當(dāng)您添加左括號(hào)時(shí)改鲫,您將看到有關(guān)該函數(shù)所需的任何參數(shù)的信息。

編譯程序

  1. 要運(yùn)行您在中定義的構(gòu)建任務(wù)林束,請(qǐng)tasks.json按Ctrl + Shift + B或從主菜單中選擇“ 視圖”>“命令面板”像棘,然后開始鍵入“任務(wù):運(yùn)行構(gòu)建任務(wù)”。該選項(xiàng)將在您完成鍵入之前出現(xiàn)壶冒。

    注意:如果看到如下錯(cuò)誤消息:cl.exe:未找到命令缕题,則表明您尚未從VS的開發(fā)人員命令提示符啟動(dòng)VS代碼。有關(guān)更多信息胖腾,請(qǐng)參見本教程的第一部分烟零。

  2. 任務(wù)開始時(shí),您應(yīng)該看到集成的Terminal窗口出現(xiàn)在代碼編輯器下方咸作。任務(wù)完成后锨阿,終端將顯示編譯器的輸出,指示構(gòu)建成功還是失敗性宏。對(duì)于成功的MSVC構(gòu)建群井,輸出如下所示:

  1. 按照消息指示,按任意鍵以關(guān)閉構(gòu)建消息毫胜。終端現(xiàn)在返回到shell命令提示符褐耳。

開始調(diào)試會(huì)話

  1. 您現(xiàn)在可以運(yùn)行該程序了。按F5或從主菜單中選擇“ 調(diào)試”>“開始調(diào)試”雨饺。在開始逐步執(zhí)??行代碼之前对省,讓我們花一點(diǎn)時(shí)間注意用戶界面中的一些更改:
  • 代碼編輯器突出顯示該main方法的第一行。這是C ++擴(kuò)展自動(dòng)為您設(shè)置的斷點(diǎn):
  • 現(xiàn)在口渔,左側(cè)的工作區(qū)窗格顯示了調(diào)試信息样屠,但由于沒有任何程序語句(除了一些系統(tǒng)啟動(dòng)代碼)已被執(zhí)行,因此沒有任何有用的信息缺脉,這反映在“線程”窗口中:
  • 在代碼編輯器的頂部痪欲,將顯示一個(gè)調(diào)試控制面板。您可以通過抓住左側(cè)的點(diǎn)在屏幕上移動(dòng)它攻礼。

單步執(zhí)行代碼

現(xiàn)在业踢,我們準(zhǔn)備開始逐步執(zhí)??行代碼。

  1. 單擊或按調(diào)試控制面板中的“ 跳過”圖標(biāo)礁扮,直到for (const string& word : msg)突出顯示該語句知举。
該**步驟在**命令跳過所有內(nèi)的內(nèi)部功能調(diào)用`vector`和`string`所述時(shí)調(diào)用類`msg`創(chuàng)建并初始化變量瞬沦。注意左側(cè)“ **變量”**窗口中的更改。在這種情況下雇锡,可能會(huì)出現(xiàn)錯(cuò)誤逛钻,因?yàn)楸M管調(diào)試器現(xiàn)在可以看到循環(huán)的變量名,但該語句尚未執(zhí)行锰提,因此此時(shí)無任何內(nèi)容可讀取曙痘。的內(nèi)容`msg`是可見的,但是欲账,因?yàn)樵撀暶饕淹瓿伞?
  1. 再次按Step over前進(jìn)到該程序中的下一條語句(跳過為初始化循環(huán)而執(zhí)行的所有內(nèi)部代碼)÷沤現(xiàn)在,“ 變量”窗口顯示有關(guān)循環(huán)變量的信息赛不。

  2. 再次按Step over執(zhí)行cout語句惩嘉。注意自擴(kuò)展程序的2019年3月版起,直到循環(huán)完成踢故,才會(huì)顯示任何輸出文黎。

  3. 如果愿意,可以繼續(xù)按Step over殿较,直到將引導(dǎo)程序中的所有單詞都打印到控制臺(tái)為止耸峭。但是,如果您感到好奇淋纲,請(qǐng)嘗試按Step Into按鈕以逐步瀏覽C ++標(biāo)準(zhǔn)庫中的源代碼劳闹!

要返回自己的代碼,一種方法是按住“ 跳過”洽瞬。另一種方法是通過helloworld.cpp在代碼編輯器中切換到選項(xiàng)卡本涕,將插入點(diǎn)放在cout循環(huán)內(nèi)的語句中的某個(gè)位置,然后按F9來在代碼中設(shè)置斷點(diǎn)伙窃。在左側(cè)的裝訂線中出現(xiàn)一個(gè)紅點(diǎn)菩颖,指示已在此行上設(shè)置斷點(diǎn)。

然后按F5鍵從標(biāo)準(zhǔn)庫標(biāo)題中的當(dāng)前行開始執(zhí)行为障。執(zhí)行將中斷cout晦闰。如果愿意,可以再次按F9鍵以關(guān)閉斷點(diǎn)鳍怨。

設(shè)置WATCH

有時(shí)呻右,您可能希望在程序執(zhí)行時(shí)跟蹤變量的值。您可以通過在變量上設(shè)置WATCH來做到這一點(diǎn)鞋喇。

  1. 將插入點(diǎn)放在循環(huán)內(nèi)声滥。在 “WATCH” 窗口中,單擊加號(hào)确徙,然后在文本框中鍵入word醒串,這是循環(huán)變量的名稱。現(xiàn)在鄙皇,當(dāng)您逐步執(zhí)行循環(huán)時(shí)芜赌,請(qǐng)查看“監(jiān)視”窗口。
  1. 通過在循環(huán)之前添加此語句來添加另一只手表int i = 0;伴逸。然后缠沈,在循環(huán)中,加上這樣一句話:++i;〈砗現(xiàn)在洲愤,i像上一步一樣添加手表。

  2. 要在斷點(diǎn)處暫停執(zhí)行時(shí)快速查看任何變量的值顷锰,可以使用鼠標(biāo)指針懸停在其上柬赐。

下一步

  • 瀏覽《VS Code用戶指南》
  • 查看C ++擴(kuò)展概述官紫。
  • 創(chuàng)建一個(gè)新的工作區(qū)肛宋,將您的.json文件復(fù)制到其中,為新的工作區(qū)路徑束世,程序名稱等調(diào)整必要的設(shè)置酝陈,然后開始編碼!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毁涉,一起剝皮案震驚了整個(gè)濱河市沉帮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贫堰,老刑警劉巖穆壕,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異严嗜,居然都是意外死亡粱檀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門漫玄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茄蚯,“玉大人,你說我怎么就攤上這事睦优∩#” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵汗盘,是天一觀的道長皱碘。 經(jīng)常有香客問我,道長隐孽,這世上最難降的妖魔是什么癌椿? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任健蕊,我火速辦了婚禮,結(jié)果婚禮上踢俄,老公的妹妹穿的比我還像新娘缩功。我一直安慰自己,他們只是感情好都办,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布嫡锌。 她就那樣靜靜地躺著,像睡著了一般琳钉。 火紅的嫁衣襯著肌膚如雪势木。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天歌懒,我揣著相機(jī)與錄音啦桌,去河邊找鬼。 笑死及皂,一個(gè)胖子當(dāng)著我的面吹牛震蒋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躲庄,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼查剖,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了噪窘?” 一聲冷哼從身側(cè)響起笋庄,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倔监,沒想到半個(gè)月后直砂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浩习,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年静暂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谱秽。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洽蛀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疟赊,到底是詐尸還是另有隱情郊供,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布近哟,位于F島的核電站驮审,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疯淫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一地来、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熙掺,春花似錦靠抑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荠列。三九已至类浪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肌似,已是汗流浹背费就。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留川队,地道東北人力细。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像固额,于是被迫代替她去往敵國和親眠蚂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容