1. 程式人生 > >vscode 配置c++

vscode 配置c++

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

總體流程:

  1. 下載安裝vscode
  2. 安裝cpptools外掛
  3. 安裝編譯、除錯環境
  4. 修改vscode除錯配置檔案

安裝cpptools外掛 

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

ext install cpptools

vscode在短暫的聯網查詢後會列出外掛列表,如圖: 

image

這裡寫圖片描述 
點選箭頭所指處的按鈕安裝外掛,安裝過程可能會有些慢耐心等待 
安裝完成後vscode會提示你重啟vscode,此時重啟即可

安裝編譯、除錯環境

(若是電腦上原來裝著codeblocks,Dev C++等可以跳過這步,

直接跳到  【配置系統環境變數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可先繼續,若最後失敗則需翻牆更新,建議翻牆。

配置系統環境變數path

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

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

再次開啟vscode,注意配置系統環境變數path後重啟一下vscode
注意vscode除錯需要在開啟的資料夾中進行(注意!是用VSC開啟資料夾!!,單獨開啟一個單獨的cpp是沒有下面的幾個配置檔案出現的!!也就是說,這個cpp要在一個資料夾裡!不像DevCpp和C-Free可以直接除錯一個單獨的cpp!!)

開啟資料夾後,新建test.cpp進行輸入程式碼測試: 
這裡寫圖片描述

如圖示進入除錯介面選擇C++: 
這裡寫圖片描述 
這裡寫圖片描述

然後會在工作目錄下的生成一個launch.json的啟動配置檔案: 
這裡寫圖片描述

使用下面程式碼替換該檔案:(只是在vsc自己產生的json檔案加了一些行)

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

[plain] view plain copy print?
  1. {    
  2.     "version": "0.2.0",    
  3.     "configurations": [    
  4.         {    
  5.             "name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示    
  6.             "type": "cppdbg",       // 配置型別,這裡只能為cppdbg    
  7.             "request": "launch",    // 請求配置型別,可以為launch(啟動)或attach(附加)    
  8.             "program": "${workspaceRoot}/${fileBasenameNoExtension}.exe",// 將要進行除錯的程式的路徑    
  9.             "args": [],             // 程式除錯時傳遞給程式的命令列引數,一般設為空即可    
  10.             "stopAtEntry": false,   // 設為true時程式將暫停在程式入口處,一般設定為false    
  11.             "cwd": "${workspaceRoot}", // 除錯程式時的工作目錄,一般為${workspaceRoot}即程式碼所在目錄    
  12.             "environment": [],    
  13.             "externalConsole": true, // 除錯時是否顯示控制檯視窗,一般設定為true顯示控制檯    
  14.             "MIMode": "gdb",    
  15.             "miDebuggerPath": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin\\gdb.exe", // miDebugger的路徑,注意這裡要與MinGw的路徑對應    
  16.             "preLaunchTask": "g++", // 除錯會話開始前執行的任務,一般為編譯程式,c++為g++, c為gcc    
  17.             "setupCommands": [    
  18.                 {     
  19.                     "description": "Enable pretty-printing for gdb",    
  20.                     "text": "-enable-pretty-printing",    
  21.                     "ignoreFailures": true    
  22.                 }    
  23.             ]    
  24.         }    
  25.     ]    
  26. }  
{  
    "version": "0.2.0",  
    "configurations": [  
        {  
            "name": "(gdb) Launch", // 配置名稱,將會在啟動配置的下拉選單中顯示  
            "type": "cppdbg",       // 配置型別,這裡只能為cppdbg  
            "request": "launch",    // 請求配置型別,可以為launch(啟動)或attach(附加)  
            "program": "${workspaceRoot}/${fileBasenameNoExtension}.exe",// 將要進行除錯的程式的路徑  
            "args": [],             // 程式除錯時傳遞給程式的命令列引數,一般設為空即可  
            "stopAtEntry": false,   // 設為true時程式將暫停在程式入口處,一般設定為false  
            "cwd": "${workspaceRoot}", // 除錯程式時的工作目錄,一般為${workspaceRoot}即程式碼所在目錄  
            "environment": [],  
            "externalConsole": true, // 除錯時是否顯示控制檯視窗,一般設定為true顯示控制檯  
            "MIMode": "gdb",  
            "miDebuggerPath": "C:\\Program Files (x86)\\CodeBlocks\\MinGW\\bin\\gdb.exe", // miDebugger的路徑,注意這裡要與MinGw的路徑對應  
            "preLaunchTask": "g++", // 除錯會話開始前執行的任務,一般為編譯程式,c++為g++, c為gcc  
            "setupCommands": [  
                {   
					"description": "Enable pretty-printing for gdb",  
                    "text": "-enable-pretty-printing",  
                    "ignoreFailures": true  
                }  
            ]  
        }  
    ]  
}

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

而且,注意miDebuggerPath是\\,與直接貼上過來的路徑不一樣,需要加一個”\”(冒號後面的兩個反斜槓“\\”

替換後儲存,然後切換至test.cpp,按F5進行除錯,此時會彈出一個資訊框要求你配置任務執行程式,點選它~ 
這裡寫圖片描述 
在這裡隨便選一個:(我選的others)

這裡寫圖片描述

然後用下面程式碼替換:

[plain] view plain copy print?
  1. {  
  2.     "version": "0.1.0",  
  3.     "command": "g++",  
  4.     "args": ["-g","${file}","-o","${fileBasenameNoExtension}.exe"],    // 編譯命令引數  
  5.     "problemMatcher": {  
  6.         "owner": "cpp",  
  7.         "fileLocation": ["relative", "${workspaceRoot}"],  
  8.         "pattern": {  
  9.             "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",  
  10.             "file": 1,  
  11.             "line": 2,  
  12.             "column": 3,  
  13.             "severity": 4,  
  14.             "message": 5  
  15.         }  
  16.     }  
  17. }  
{
    "version": "0.1.0",
    "command": "g++",
    "args": ["-g","${file}","-o","${fileBasenameNoExtension}.exe"],    // 編譯命令引數
    "problemMatcher": {
        "owner": "cpp",
        "fileLocation": ["relative", "${workspaceRoot}"],
        "pattern": {
            "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
            "file": 1,
            "line": 2,
            "column": 3,
            "severity": 4,
            "message": 5
        }
    }
}

儲存一下,然後切換至test.cpp,再次按F5啟動除錯~ 

這裡寫圖片描述

配置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


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


最後效果: 
設定斷點,變數監視,呼叫堆疊的檢視: 
設定斷點,變數監視,呼叫堆疊的檢視

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

新更新:

最後補一句:

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