整理:Visual Studio Code (vscode) 配置C、C++環境/編寫運行C、C++(主要Windows、簡要Linux)

2020年2月22日更新,又按照自己的帖子嘗試了以下,感覺大的思路是沒問題的啊,小改動用紫色的標記標註出來了,另外如評論區所說刪去了部分舊版本的內容和圖片,不知道爲啥評論區的留言我都沒收到郵件。。。

現在是2019.7.21,由於這陣一直在忙,今天我用最新的VSCode() 和最新的Cpp插件(version 0.24.0)按照本文的安裝步驟從零開始試了一下,由於vscode版本和cpp插件版本更新確實變化了很多,2019年7月21日更新的我會用這個顏色(粉色?)標示出來,供大家參考進行配置也可以參考官方文檔:https://code.visualstudio.com/docs/cpp/config-mingw

弄了半天,總算弄好了,結合網上的教程,整理分享一下~

發現總有童鞋問相同的問題,開始我還以爲是沒有配置好,今天我自己按照我原來寫的嘗試了以下,確實出現了問題,可能是VScode或者cpp的插件版本問題,2018.12.29更新,我會用綠色的字體表示。

另外要是本文的更新內容仍然不能解決您的問題,可以看看這篇文章,這篇文章是之後寫的,比這篇有條理些,配置過程也簡單些。要是始終有問題,歡迎評論區留言,我會抽時間盡我所能解答(非大神有好多解答不了。。。)

總體流程:

  1. 下載安裝vscode
  2. 安裝cpptools插件
  3. 安裝編譯、調試環境
  4. 配置系統環境變量path
  5. 修改vscode調試配置文件
  6. 其他
  7. Linux版本配置(簡要)

1、下載安裝vscode

https://code.visualstudio.com/Download 
 

2、安裝cpptools插件 

打開vscode,按ctrl+p打開快速命令框,輸入以下命令後等待

ext install cpptools

vscode在短暫的聯網查找後會列出插件列表,如圖: 

image

這裏寫圖片描述 
 

點擊箭頭所指處的按鈕安裝插件,安裝過程可能會有些慢耐心等待 
安裝完成後vscode會提示你重啓vscode,此時重啓即可

更新:因爲我裝這個插件已經是幾年之前了,不確定現在界面還是不是這樣,但是意思不變,裝完後點重新加載就行了

3、安裝編譯、調試環境

(若是電腦上原來裝着codeblocks,Dev C++等可以跳過這步,【建議安裝codeblocks使用其自帶的編譯器】

直接跳到  【4、配置系統環境變量path】 這步即可

目前windows下調試僅支持 Cygwin 和 MinGW。 
這裏使用的是MinGW. 
下面是MinGW的安裝配置過程: 
http://mingw.org/ 
進入官網點擊右側 Download Installer下載安裝器 
打開安裝器點擊install準備安裝: 
這裏寫圖片描述

選擇一個安裝目錄,默認爲C:\MinGW這裏選擇的是A:\MinGW 
點擊Continue開始安裝,安裝過程需聯網,若安裝時提示error則需翻牆安裝 
安裝過程很快,結束後Continue按鈕恢復爲可用狀態,點擊完成安裝。

這裏寫圖片描述 
打開MinGW安裝管理器進行進一步配置

這裏寫圖片描述

注意這裏gdb必選,否則無法調試 
這裏寫圖片描述

選中幾個需要的項右鍵Make for Installation進行標記,其中gcc和g++爲c和c++編譯器 
選擇完全部想要安裝的項後點擊左上角Installation菜單下的Apply Changes應用修改,過程需聯網,中間出現error可先繼續,若最後失敗則需翻牆更新,建議翻牆。

更新:單獨裝MinGW ,我最早是這麼搞的,要是發現不可以(無法下載或者很懷疑自己MinGW沒安裝好等),可以試試codeblocks或者Dev-cpp等等,這些IDE自帶編譯器,還是看這篇文章 裏面有使用codeblocks自帶的MinGW的細節,當然要是可以就繼續。

4、配置系統環境變量path

然後配置系統環境變量path,這一步爲必須 
在 我的電腦 上右鍵 屬性: 
然後按照下面步驟做即可,注意最後新建的項要與之前MinGW安裝位置相對應 

Windows7注意,要加入,不是覆蓋!我第一次不小心把原來路徑覆蓋了。。。(因爲win7不像win10那麼明顯是加入。。)
這裏寫圖片描述

重啓電腦(非常建議),避免出現奇奇怪怪的問題

再次打開vscode,注意配置系統環境變量path後重啓一下vscode 
注意:vscode調試需要在打開的文件夾中進行(注意!是用VSCode打開文件夾!!單獨打開一個單獨的cpp是沒有下面的幾個配置文件出現的!!也就是說,這個cpp要在一個文件夾裏!不像DevCpp和C-Free可以直接調試一個單獨的cpp!!)

5、修改vscode調試配置文件

打開文件夾後,新建test.cpp(隨便建,或者main.cpp)進行輸入代碼測試: 

#include <iostream>
using namespace std;

int main()
{
    cout << "hello" << endl;
    return 0;
}


新修改了截圖(配色是:Dracula)

如圖示進入調試界面選擇C++: 【該圖已更新,老版本圖已刪除,反正debug就是按那個蟲子的圖標】

更新:現在點擊之後變成了這樣的:VScode還會讓你再選一個,都選第一個吧

然後會在工作目錄下的生成一個launch.json的啓動配置文件: 
這裏寫圖片描述

使用下面代碼替換該文件:(只是在vsc自己產生的json文件加了一些行)

launch.json中有很多屬性可以設置, 通過智能提示查看有那些屬性可以設置, 如果要查看屬性的具體含義, 可以把鼠標懸停在屬性上面, 會屬性的使用說明.

{  
    "version": "0.2.0",  
    "configurations": [  
        {  
            "name": "(gdb) Launch", // 配置名稱,將會在啓動配置的下拉菜單中顯示  
            "type": "cppdbg",       // 配置類型,這裏只能爲cppdbg  
            "request": "launch",    // 請求配置類型,可以爲launch(啓動)或attach(附加)  
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",// 將要進行調試的程序的路徑  
            "args": [],             // 程序調試時傳遞給程序的命令行參數,一般設爲空即可  
            "stopAtEntry": false,   // 設爲true時程序將暫停在程序入口處,一般設置爲false  
            "cwd": "${workspaceFolder}", // 調試程序時的工作目錄,一般爲${workspaceFolder}即代碼所在目錄  
            "environment": [],  
            "externalConsole": true, // 調試時是否顯示控制檯窗口,一般設置爲true顯示控制檯  
            "MIMode": "gdb",  
            "miDebuggerPath": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin\\gdb32.exe", // miDebugger的路徑,注意這裏要與MinGw的路徑對應  
            "preLaunchTask": "g++", // 調試會話開始前執行的任務,一般爲編譯程序,c++爲g++, c爲gcc  
            "setupCommands": [  
                {   
		    "description": "Enable pretty-printing for gdb",  
                    "text": "-enable-pretty-printing",  
                    "ignoreFailures": true  
                }  
            ]  
        }  
    ]  
}

更新:注意:如評論區所說,workspaceRoot已被棄用,現改爲workspaceFolder,上面的代碼我已經改好了

更新:vscode默認的"externalConsole": false,,而我這裏改爲了true,改爲true即在控制檯內部運行,不顯示黑框,但是要是不顯示黑框似乎沒法輸入(cin或者scanf)了(沒怎麼試過,讀者可以試試)

注意miDebuggerPath要與MinGw的路徑對應 ,我用的codeblocks的gdb,見上面的json文件。

注意miDebuggerPath是\\,與直接粘貼過來的路徑不一樣,需要加一個”\”(冒號後面的兩個反斜槓“\\”),或者使用一個“/”

替換後保存,然後切換至test.cpp,按F5進行調試,此時會彈出一個信息框要求你配置任務運行程序,點擊它~ 
替換後保存,按F5進行調試,此時會彈出:

【注意】,上面的那個目前的cpp插件似乎沒有了,若是直接按F5會出現下面這個圖,不清楚評論區童鞋說的是不是這個?

【舊版本圖已刪除】請點擊第二個“配置任務”,然後出現這個:點就行了~【舊版本圖已刪除】之後出現:【舊版本圖已刪除】在這裏隨便選一個:(我選的others)【隨便選,反正最後tasks.json文件要被覆蓋】【下面的圖是更新之前的圖】【舊版本圖已刪除】

 

 

點擊第一個”配置任務“,然後會出現:我選的第三個,g++那個

更新:現在變成這樣的了:我選的第三個,g++那個

然後用下面代碼替換:【更新:原來的"version": "0.2.0"似乎會有下劃線報錯,那就按照vscode說的改爲2.0.0好了,下面的是最新的複製即可。】

【提供兩個版本,目前似乎都可以,推薦使用第二個版本】

第一個版本的tasks.json

{
    "version": "2.0.0",
    "command": "g++",
    "args": ["-g","${file}","-o","${fileBasenameNoExtension}.exe"],    // 編譯命令參數
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceFolder}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}

第二個版本的tasks.json

更新:我發現使用vscode自己生成的`tasks.json`,似乎也可以成成功運行,我把VSCode自己生成的這個json文件也貼上來(稍加改動):這個json文件和上面那個都是可以使cpp正常運行的

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++", //這裏注意一下,見下文
            "command": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}

注意:“label”那一行,要和前面的`launch.json`中的"preLaunchTask": "g++"這裏寫的一樣,因爲前面`launch.json`中的"preLaunchTask"裏我改爲了g++,所以這裏我也改爲g++,vscode默認的是`g++.exe build active file`【`launch.json`("preLaunchTask": "g++.exe build active file")和`tasks.json`("label": "g++.exe build active file"),都是默認的這個,當然無論是什麼,只要保持一致就行】

上面那一段話的圖示說明:

保存一下,然後切換至test.cpp,再次按F5啓動調試~

然後會發現有一個黑框一閃而過,然後終端顯示“終端將被任務重用,按任意鍵關閉”,說明大家的配置沒問題啊評論區有這個問題的童鞋們!只是vscode不是自己在程序末尾停止而已啦,和IDE不一樣。

可以在最後加一個斷點,或者getchar(),或者system("pause");  或者int pause;cin>>pause; 看個人喜好了,個人感覺最後在return 0;處打一個斷點比較好。然後程序就會在最後停住了。

 下面這個是最後用getchar()的舊圖,沒刪供參考

這裏寫圖片描述

【更新:似乎下面的步驟配置c_cpp_properties.json不需要了,因爲我按照上面的步驟來似乎沒有在頭文件有下劃線和原來有的燈泡圖標什麼的,所以下面的開始到 “6、其他” 之前可以不用看(後面還有內容!),到這裏基本配置完成】

配置c_cpp_properties.json

  • 保存一下,然後切換至a.cpp,再次按F5啓動調試。
  • 如果前面的配置都對的話,這個時候會進行編譯,然後跳出黑框輸出Hello World,之後窗口又迅速消失。
  • 可能大多數人已經習慣了VS/VC的便利,其實我們這隻要在末尾加上一個cin輸入即可。加上int pause;cin>>pause;後再按F5。
  • 但是這個貌似不夠高大上,其實我們一般是使用system('pause');實現,換上後再次運行,這時候報錯了。因爲我們我們引用的庫有問題,沒有正確引用進來,注意這裏不是VS/VC,需要我們自己配置路徑。
  • 注意:之前在下載安裝GNU哪裏已經配置了相應的環境變量,但是VScode中有個配置文件,他是根據自己的配置文件來找的。
  • 在編輯器中,有小波浪的就是代碼有問題,看下#include<iostream>,左邊有個燈泡,點擊後跳出配置文件,修改其中的Win32的"includePath"如下,和上文一樣,根據自己的路徑進行調整即可。經測試,下圖中代碼的註冊部分仍是必要部分
{
    "name": "Win32",
    "includePath": [
        "C:/Program Files/MinGW/include/*",
        "C:/Program Files/MinGW/lib/gcc/mingw32/5.3.0/include/*"
        "C:/MinGW/lib/gcc/mingw32/5.3.0/include/c++/*",
        "C:/MinGW/lib/gcc/mingw32/5.3.0/include/c++/mingw32/*",
        "C:/MinGW/lib/gcc/mingw32/5.3.0/include/c++/backward/*"
    ],
    "browse": {
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": ""
    }
}

image

6、其他

一勞永逸:因爲VS需要爲每一個文件夾做單獨配置,所以建議把.vscode文件夾放到你常用的文件夾的頂層,這樣就不用重複配置了。
不用每個新cpp文件就要一套配置。這些配置在你配置好的文件夾內的所有子文件夾和文件都能使用。

 

最後效果: 
設置斷點,變量監視,調用堆棧的查看: 
設置斷點,變量監視,調用堆棧的查看

條件斷點的使用: 
條件斷點的使用

新更新:【紅色的是很早很早前更新的,2018.12.29更新,會用綠色的字體表示】

最後補一句:

vscode似乎還僅僅支持英文文件名的調試,中文調試的話就會出現“找不到文件XXXXX.cpp”(大意,原文記不清了,因爲距離這個問題我已經解決很長時間了,今天看到想補一下,別讓新人踩坑了。。。),然後問是否要創建,不知道是BUG還是啥,這糾結了我N久,因爲我有些cpp文件是中文命名的,我去Github上找相應的issue也沒有找到我想要的這個問題解答,最後偶然間發現英文命名的文件調試時不會出現這個問題,才解決了!!真的很坑!!!新人注意!!!這裏浪費了我很長很長時間!!

【要是根據上述方法還沒有配置成功,請看評論區是否有人提出了類似問題,還可以按照我在這篇文章之後一段時間寫的一篇:這篇文章,那篇文章使用了codeblocks自帶的MINGW,而且配置方法比這個簡單一些(因爲這個是最早寫的),要是始終有問題,歡迎留言,我會抽時間盡我所能解答(非大神有好多解答不了。。。) 】

 

Linux版本配置(簡要)

也是很早之前配置過Linux的,今天我偶然發現了有以前用Linux配置的文件,感覺步驟都和windows配置不多(似乎沒有miDebuggerPath這一項),直接上文件了:

【注意:不確定這個還能不能用,因爲是很早之前的了,僅僅做參考】

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",	// 配置名稱,將會在啓動配置的下拉菜單中顯示
            "type": "cppdbg", 		// 配置類型,這裏只能爲cppdbg
            "request": "launch",	// 請求配置類型,可以爲launch(啓動)或attach(附加)
            "program": "${workspaceRoot}/${fileBasenameNoExtension}.o",// 將要進行調試的程序的路徑
            "args": [],				// 程序調試時傳遞給程序的命令行參數,一般設爲空即可
            "stopAtEntry": false, 	// 設爲true時程序將暫停在程序入口處,一般設置爲false
            "cwd": "${workspaceRoot}",// 調試程序時的工作目錄,一般爲${workspaceRoot}即代碼所在目錄
            "environment": [],
            "externalConsole": true,// 調試時是否顯示控制檯窗口,一般設置爲true顯示控制檯
            "MIMode": "gdb",
            "preLaunchTask": "g++",	// 調試會話開始前執行的任務,一般爲編譯程序,c++爲g++, c爲gcc
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

tasks.json:

{
    "version": "0.1.0",
    "command": "g++",
    "args": ["-g","${file}","-o","${fileBasenameNoExtension}.o"], // 編譯命令參數
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章