不要轉載,唯一出處:tnnmigga博客園
最后更新於2019年8月12日:
這篇文章已經更新了2.x版本,添加了一些新內容和修正了一些錯誤
新文章的地址是:https://zhuanlan.zhihu.com/p/77645306
-----------------------------下面是原文章---------------------------------
vscode支持類似於vs的斷點調試c/c++,也可以直接編譯&運行c/c++
先是編譯運行 c/c++的方法
微軟官方起初設定的科學做法(這也是現在的科學做法)是通過在vscode集成控制台寫命令行的方式來實現編譯運行程序的,但也可以通過code runner插件來簡化步驟,實現一鍵編譯執行
但無論是什么方法,因為vscode本身並不帶有編譯器,都需要自己提前安裝好一個c/c++編譯器(如mingw,clang)並且配置好環境變量(不會請點擊這里)
控制台下編譯運行C/C++(如果不懂命令行操作可以暫時跳過這里):
按 ctrl + ~ 打開vscode控制台,點擊終端,在vscode的終端下操作其實就是在windows下的cmd或者powershell下操作,一切的編譯運行等操作可以用輸入命令行的方式來實現,只要掌握各自的編譯器的命令行指令就能讓程序在vscode界面上運行起來
c/c++編譯器的那一套自然不在話下(如下圖),先用cd 命令切換到源文件目錄或者直接輸入完整路徑名,然后用編譯器指令(假設編譯器是mingw) g++ xxx.cpp -o xxx.exe編譯,接着再輸入./xxx.exe就可以運行編譯好的程序
其他的c/c++編譯器如clang包括其他語言(Python ,Go,Java...)都可以類似的這樣操作
便捷方式是使用code runner插件:
code runner插件默認的c/c++編譯器是gcc/g++,需要提前安裝好並且設置好環境變量,通常選擇MinGW或者MinGW-w64,建議選mingw-w64,一般用戶建議下載離線版解壓后添加環境變量,離線版下載地址:鏈接
不會請看:安裝mingw-w64具體過程
同時,code runner插件使用的編譯器是可以被修改為gcc/g++以外的編譯器的(比如clang,MSVC),有這方面需要請看:vscode修改code runner使用的編譯器
mingw和mingw-w64是有區別的,直觀的說,mingw-w64更加強大
安裝好並且設置好二者中的一個,並設置好環境變量后在cmd下輸入gcc -v確認是否成功,出現關於gcc -v的相關信息(如下圖)就表示成功
接着點擊vscode左側面板中的插件商店按鈕
安裝好下面兩個插件
C/C++
Code runner
如果需要中文請安裝一個chinese插件
注意,如果沒安裝clang的話不要安裝推薦插件里的c/c++ clang插件,否則應該會報錯
安裝好后重啟一下vscode這樣就能在右上角看見一個三角形了,打開文件點擊就能編譯執行
但此時會有這樣一個問題
如果程序里有scanf()等請求鍵盤輸入數據的函數,此時無法從鍵盤輸入數據,並且程序無法結束需要關閉重啟vscode才能重新執行
解決辦法是依次打開:文件>首選項>設置>用戶設置>拓展>Run Code Configuration
找到 Run In Terminal 打上勾 這樣運行的程序就會運行在vscode的集成控制台上
在工作區設置也有這個選項,但工作區設置只會對工作區生效
這樣問題就能解決了
運行一段測試代碼
#include<bits/stdc++.h> using namespace std; int main(){ cout<<"hello"<<endl; int u; while(cin>>u){ cout<<u*u<<endl; } }
這時輸出信息會顯示在終端欄下面
隨便輸入測試數據
可以看到下圖的效果
點擊右上角的垃圾桶能提前結束程序運行
code runner插件有一個局限,code runner插件的原理其實是自動在控制台下幫助我們輸入g++ xxx.cpp -o xxx.exe(假設是默認情況)這條編譯指令,不會再添加額外的命令,比如如果代碼中使用了winsock2用g++編譯的話需要額外添加-lwsock32指令,即完整指令為g++ xxx.cpp -o xxx.exe -lwsock32,此時直接使用code runner的話會無法編譯,這種情況應該使用上面提到的vscode集成控制台手動輸入編譯指令編譯
調試 c/c++方法
首先一點:不支持中文路徑!!!(文件名和整個文件路徑名中都不能有中文,否則無法調試,是由mingw不支持中文路徑造成的)
實際效果類似vs那樣按f5斷點調試
首先選中一個用於存放各種代碼的文件夾作為根路徑也就是工作區,因為調試只會對根路徑下的文件生效!!!
在vscode中打開這個文件夾(文件>打開文件夾>選中你的文件夾)
之后再在這個文件夾新建一個 .vscode 的文件夾,不要忘了開頭的 "." 號(如果已有則不必再額外新建)
再在.vscode文件夾中新建兩個配置文件 launch.json 和 tasks.json
類似於下圖
之后再把下面的兩個段代碼粘貼到對應的文件里
這里需要修改一處:launch中 "miDebuggerPath" 選項需要設置為你的調試器(gdb.exe)所在位置 這里的是我電腦上MinGW -w64的安裝位置
無論安裝的是MinGW還是mingw-w64,都會有一個gdb.exe在安裝目錄的bin文件夾下,一定要把對應的路徑修正否則無法調試
launch.json
tasks.json
之后打開在當前工作區子目錄下的.c/cpp文件就可以添加斷點進行調試了
此時可以按 ctrl+shift+b 直接調用配置好的g++ task 編譯程序而不運行程序,類似於一些IDE的編譯選項
如果我們要查看當前某個變量的值或者某個表達式的值,可以像vs一樣在左側的調試面板添加監視
也可以在下方的調試控制台里直接輸入表達式或者變量名
當然,最簡單的還是鼠標直接移動到變量上,往往直接就顯示出來了,如果靠這樣不能解決的話,就試試上面兩種方法
也可以讓c/c++程序的調試在vscode的集成控制台上進行,不在額外顯示黑窗口,類似於code runner的界面效果
只需將launch.json中的 "externalConsole" 項由 true 改為 false
經評論區提醒
此時可能會遇到這樣一個問題,如果你的輸入法當前是中文輸入的話,輸入數據時會很長時間才能反應過來,只需要按shift將輸入法切換到英文狀態就不會遇到這個問題了,可以直接設置輸入法首選項為英文
效果
類似於code runner的問題: 如果是需要有額外的編譯指令如-lwsock32,需要調試前事先在tasks.json的args處添加上對應的指令,或者用 // 注釋掉launch.json中的 preLaunchTask:"g++"(啟動調試前執行g++編譯按tasks指令格式編譯) 這一項,然后自己在按ctrl + ~ 打開終端手動編譯好后再執行調試
記住:調試是屬於工作區設置,當前配置的調試環境只會對當前.vscode文件夾所在路徑下的文件生效,如果要換用別的文件夾,把.vscode這個文件夾拷貝過去即可
最后,我使用的主題插件為tangming Themes,感興趣的可以去插件商店下載,里面一共四個主題
似乎有很多打ACM的同學在看,再提醒一點,在上面提到集成終端下調試,將題目測試數據粘貼到命令行,測試到一半就發現問題,點重新啟程調試的按鈕,會因為剩余的數據未被讀取而造成錯誤
比如這樣的錯誤信息:
所在位置 行:1 字符: 2
+ 5& 'c:\Users\tangm\.vscode\extensions\ms-vscode.cpptools-0.24.1\debug ...
+ ~
表達式或語句中包含意外的標記“&”。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
正常現象,再重新點一下啟動就可以了