VS Code 安裝與配置(使用MSYS2環境與mingw-w64 編譯環境)


力求完美、詳細,望各位留言指點

 目前已經開始添加原理解釋,希望大家能分享一些gcc gdb C語言等方面優秀鏈接

  后續會慢慢增添內容,修正不足。  希望這篇文章能帶大家入坑。

                ------------- 博客園 YuCloud  https://yucloud.cnblogs.com

 Ps.2019年消息:VSCODE已支持全局配置,C/Cpp插件也支持UI界面設置。(但本質是通過圖形界面配置JSON)

請耐心看完,這能讓你了解什么是IDE,充分理解 【調試、運行和命令行】,以及系統與程序間的關系

如果只是想找三個文件的配置方法,請點下面導航。(其實這三個文件配置並不難,難的是沒用過gcc g++ gdb,當你稍微地使用之后,配置自然是水到渠成)

基本上各平台配置內容的最大差異在於那個include路徑,所以只要寫下正確路徑,其他都是小問題

 


 

怎么查看gcc默認的include路徑 :

     Linux下是                 gcc -v -x c -E /dev/null 

     Windows下是           gcc -v -x c -E NUL

然后找到輸出內容中的 #include <...> search starts here:

附上新版UI配置界面的圖

 大同小異

 


 目錄書簽導航

  1. 下載安裝(2個軟件)
  2. 配置MSYS2環境     && 換源
  3. 安裝Mingw-w64編譯工具
  4. 變量配置
  5. VS Code與MinGw搭配使用

  •  強烈建議先初步學會使用gcc(mingw64)等命令,這樣配置才不會一臉懵逼

1,下載安裝(2個軟件)

VS Code官網:https://code.visualstudio.com/        ps: system installer和user installer的區別就在用於為所有用戶/單用戶安裝。

 

MSYS2官網:https://www.msys2.org                     我電腦系統是Windows 10   x64,所以選擇

 

 

2,配置Msys2環境

請搭配這篇文章使用本博文:https://zhuanlan.zhihu.com/p/33751738

在開始菜單啟動MSYS2

 

輸入命令 以更新MSYS2軟件列表數據庫:(當提示沒有更新時即是最新,下同)

pacman -Sy 

更新成功會提示你關閉窗口

 

Ps:如果下載速度過慢,可以改中國科學技術大學源:https://mirrors.ustc.edu.cn/help/msys2.html   其他源的使用同理。

可用圖形文件管理 或者  用命令將源寫入(mirrorlist.msys示例):

 1 cp /etc/pacman.d/mirrorlist.mingw32 /etc/pacman.d/mirrorlist.mingw32.bak1
 2 sed '/^## msys2.org/a\Server = https://mirrors.ustc.edu.cn/msys2/mingw/i686/' /etc/pacman.d/mirrorlist.mingw32 > /etc/pacman.d/mirrorlist.mingw32.t
 3 mv /etc/pacman.d/mirrorlist.mingw32.t /etc/pacman.d/mirrorlist.mingw32
 4 
 5 cp /etc/pacman.d/mirrorlist.mingw64 /etc/pacman.d/mirrorlist.mingw64.bak1
 6 sed '/^## msys2.org/a\Server = https://mirrors.ustc.edu.cn/msys2/mingw/x86_64/' /etc/pacman.d/mirrorlist.mingw64 > /etc/pacman.d/mirrorlist.mingw64.t
 7 mv /etc/pacman.d/mirrorlist.mingw64.t /etc/pacman.d/mirrorlist.mingw64
 8 
 9 cp /etc/pacman.d/mirrorlist.msys /etc/pacman.d/mirrorlist.msys.bak1
10 sed '/^## msys2.org/a\Server = https://mirrors.ustc.edu.cn/msys2/msys/$arch/' /etc/pacman.d/mirrorlist.msys > /etc/pacman.d/mirrorlist.msys.t
11 mv /etc/pacman.d/mirrorlist.msys.t /etc/pacman.d/mirrorlist.msys
12 
13 pacman -Sy
修改源腳本

 

在三個源配置文件搞定后記得   pacman -Sy 

 如果一直有問題,就把中科大源里的https換成http

附上pacman包管理的官方用法:https://wiki.archlinux.org/index.php/Pacman_(簡體中文)#安裝軟件包

       更簡潔的pacman用法實例    https://blog.csdn.net/taiyang1987912/article/details/41253533

如果提示 無法鎖定數據庫:可以到msys64安裝路徑下/var/lib/pacman/  把db.lck改名為db.lck23,然后pacman -Sy

然后出現提示,此時關閉窗口

再更新核心軟件包

pacman -Syu

 

同步源並更新所有軟件包(沒錯,命令和上面的一樣)

pacman -Syu

 

再安裝常用開發環境與工具

pacman -S  base-devel  git  mercurial  cvs  wget  p7zip  perl  ruby  python2

 

 

3,安裝Mingw-w64編譯工具

 

安裝32位Mingw-w64:

pacman -S  mingw-w64-i686-toolchain

 

安裝64位Mingw-w64:

pacman -S  mingw-w64-x86_64-toolchain

 安裝后打開開始菜單里MSYS2 64bit 的"MSYS MinGw 64-bit“和"MSYS MinGw 32-bit“,都輸入gcc -v查看gcc版本號,然后關閉

4,變量配置

 打開系統環境變量配置

可以用:win鍵+右上角的pause鍵,筆記本用Win+Fn+Pause,或者直接右擊我的電腦-屬性

然后點高級系統設置-——環境變量(N)

雙擊系統變量的Path,新建

C:\msys64\mingw64\bin

 

再添加環境變量 HOME

C:\msys64\home\<用戶名>

 

據說這個變量很有用,后面配置要多次用到。(注意:<用戶名>尖括號表示該內容要填你自己的安裝用戶名,如我該目錄下的是kui就應該填C:\msys64\home\kui

(這里的C:\msys64是Msys2的默認安裝路徑,如果路徑不一樣,請自行變通)

重啟一下電腦讓變量生效(2018年: 變量好像是及時生效的,只要重開cmd窗口就行,變量會在新窗口里生效)

 

然后打開cmd,輸入(回顯中有HOME和Path變量即可)

set |findstr msys64

 或者

set HOME && Path

 

再輸入(回顯中有版本號即可)

gcc -v

那么變量配置完成

 

5,VS Code與MinGw搭配使用

 

請搭配VS Code官網使用說明:https://code.visualstudio.com/docs/languages/cpp

因為官網有可能更新,且本文不一定完全正確,因此建議讀者分屏(WIn鍵+方向鍵)同時閱讀本文和官網說明

(看不懂英文可以掛梯子使用谷歌網頁翻譯)

 

 

 

打開Vscode,會提示你打開一個工作目錄(菜單欄 File - Open folder選擇你想要項目放置的工作目錄即可)

然后新建文件,寫好c語言的helloword代碼並保存為test.c 

1 #include <stdio.h>
2 #include <stdlib.h>
3 
4 int main(void) {
5     printf("HelloWorld!");
6     system("pause");
7     return 0;
8 }
test.c

 

安裝C / C ++擴展(沒有內置編譯器) 

  • 單擊補充工具欄(側邊欄)上的“擴展視圖”圖標。
  • 搜索 C/C++ 。
  • 單擊“ Install” ,然后單擊“ reload to active”

然后配置IntelliSense智能代碼感應:

 

在VS Code里按快捷鍵 左Ctrl+左Shift+P 【是Shift而非Alt】鍵入並運行

C/Cpp:Edit Configurations

可參考這兩篇文章 整理:Visual Studio Code (vscode) 配置C、C++環境/編寫運行C、C++(主要Windows、簡要Linux) - 一葦以航 - CSDN博客

Visual Studio Code 如何編寫運行 C、C++ 程序? - 知乎用戶的回答 - 知乎 

 

此時會生成第一個JSON文件:

[ JSON 是一種存儲和交換文本信息的語法,類似 XML。但更小更快,便於 JS 解析(因為 VSCODE 是JS寫的)]

 

c_cpp_properties.json

修改內容如下(注意,這個文件不允許使用注釋):

 1 {
 2     "configurations": [
 3         {
 4             "name": "MinGw-w64_Win32",
 5             "includePath": [
 6                 "C:\\msys64\\mingw64\\include",
 7                 "C:\\msys64\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\8.2.0\\include",
 8                 "${workspaceFolder}/**"
 9             ],
10             "defines": [
11                 "_DEBUG",
12                 "UNICODE",
13                 "_UNICODE"
14             ],
15            
16             "compilerPath": "C:\\msys64\\mingw64\\bin\\gcc.exe", 
17             "cStandard": "c11",
18             "cppStandard": "c++17",
19             "intelliSenseMode": "msvc-x64"
20         }
21     ],
22     "version": 4
23 }
c_cpp_properties.json

更新一下說明:當需要第三方SDK如Npcap/WinPcap時,請在includePath自行添加

另外Linux常用的頭文件getopt.h位置在

"C:\\msys64\\mingw64\\x86_64-w64-mingw32\\include"
還有,VSCODE和VS一樣支持引用環境變量(系統環境變量和VSCODE內置變量)
VSCODE內置變量如   "${workspaceFolder}/**",   這句是默認的include配置內容,會指定搜索工作目錄下的頭文件等
includePath   就是#include預處理器搜索路徑
defines   一些定義,用於條件編譯,和編譯時的flag有關
compilerPath 編譯器所在完整路徑
c/cppStandard是c/cpp語言標准如c11 c++17
intelliSenseMode 是代碼智能感應模式,通過研究關鍵詞去看懂腳本(#無奈臉),
如果不太清楚,可以補一下gcc 相關知識/或者學着用gcc編譯(善用搜索引擎)或者看看官方資料,
 
看不懂也沒關系,請慢慢來,不着急(我前幾個月看的時候也是完全不懂的,現在看懂很多了)

VSCODE內置變量 https://code.visualstudio.com/docs/editor/variables-reference

[很明顯,上面這部分完全是 gcc配置各種路徑 的知識] 不過gcc g++編譯器是有區別的,如果用C++還是推薦g++

 更新說明:此處intelliSenseMode 值 msvc-x64 應改為 gcc-x64,因為用的是gcc而非微軟VS自帶的編譯器

 

 接下來配置啟動/調試程序的腳本

單擊補充工具欄(側邊欄)上的“Debug”圖標

點擊 配置圖標,可選方案有如下:

  1.  C++ (GDB/LLDB) (to use GDB or LLDB)
  2. C++ (Windows) (to use the Visual Studio Windows Debugger) from the Select Environment drop-down list.

This creates a launch.json file for editing with two configurations:

  • C++ Launch defines the properties for launching your application when you start debugging.
  • C++ Attach defines the properties for attaching to a process that's already running.

Update the program property with the path to the program you are debugging.

If you want your application to build when you start debugging, add a preLaunchTask property with the name of the build task you created in tasks.json ("build hello world" in the example above).

如果看得懂英文,請看這里官方詳細:

(其實就幾個單詞,並不難,請試着讀懂它)↓↓↓

vscode-cpptools/launch.md at master · Microsoft/vscode-cpptools

會生成第二個文件:

 launch.json

官方資料參考

修改內容如下:

 1 {
 2     
 3     //${workspaceFolder} - /home/your-username/your-project
 4     //${workspaceFolderBasename} - your-project
 5     //${file} - /home/your-username/your-project/folder/file.ext
 6     // ${relativeFile} - folder/file.ext
 7     // ${fileBasename} - file.ext
 8     // ${fileBasenameNoExtension} - file
 9     // ${fileDirname} - /home/your-username/your-project/folder
10     // ${fileExtname} - .ext
11     // ${lineNumber} - 5
12     // ${selectedText} - Text selected in your code editor
13 
14     // Use IntelliSense to learn about possible attributes.
15     // Hover to view descriptions of existing attributes.
16     // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
17     "version": "0.2.0",
18     "configurations": [
19         {
20             "name": "(gdb) Launch",
21             "type": "cppdbg",
22             "request": "launch",
23             "program": "${fileDirname}/${fileBasenameNoExtension}.exe",
24             "args": [],
25             "stopAtEntry": false,
26             "cwd": "${workspaceFolder}",
27             "environment": [],
28             "externalConsole": true,
29             //  "internalConsoleOptions": "neverOpen",
30             "MIMode": "gdb",
31             "miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
32             "preLaunchTask": "gcc",
33             "setupCommands": [
34                 {
35                     "description": "Enable pretty-printing for gdb",
36                     "text": "-enable-pretty-printing",
37                     "ignoreFailures": true
38                 }
39             ]
40         }
41     ]
42 }
launch.json

 

[這部分完全是  GDB、cmd命令行知識、全局環境變量、利用腳本啟動其他exe 的知識]

至於變量的使用,看微軟文檔:https://code.visualstudio.com/docs/editor/variables-reference

 

 

再配置編譯的腳本

還是,快捷鍵Ctrl+Shift+P鍵入並運行     

Tasks: Configure Task

 

然后點擊“Create tasks.json file from templates”再選擇“Others”,

會生成第三個文件:

tasks.json

 

修改內容如下:

 1 {
 2     // See https://go.microsoft.com/fwlink/?LinkId=733558
 3     // for the documentation about the tasks.json format
 4     "version": "2.0.0",
 5     "tasks": [
 6         {
 7             "label": "gcc",
 8             "type": "shell",
 9             "command": "gcc",
10             "args":[
11                 // "-std=c11",
12                 "-g",
13                 "-fexec-charset=GBK",
14                 "${file}",
15                 "-o",
16                 "${fileDirname}/${fileBasenameNoExtension}.exe",
17                 "-Wall",
18                 "-static-libgcc"
19             ]
20         }
21     ]
22 }
task.json

 

 

[完全是 gcc命令行工具 的知識]

-fexec-charset=GBK 這個參數是gcc編譯器用來處理中文字符顯示問題的,
      更多gcc參數的使用https://www.cnblogs.com/zhangsir6/articles/2956798.html 或者查看GNU官方文檔

然后,看到"label"了嗎?

這個配置的值就要和之前在launch.json里的那個"preLaunchTask"的值一樣,例如:

          "preLaunchTask": "gcc"  //  [launch.json文件里的]
     "label" : "gcc"        //  [tasks.json  文件里的]
因為preLaunchTask意思是:在此之前啟動指定task
 
        

 

既然是入門,就一步步手動來,這樣能更了解IDE的執行過程(這也許也是微軟想帶給我們的),很有價值的。

用於Visual Studio代碼的C / C ++(預覽版) 
Microsoft C / C ++擴展提供了對Visual Studio Code的C / C ++支持,以便在Windows,Linux和macOS上使用VS Code實現跨平台C和C ++開發。 該擴展仍處於預覽階段,我們關注的是VS代碼運行的所有C和C ++代碼的代碼編輯,導航和調試支持。 

如果您只想要一個輕量級工具來編輯C ++文件,Visual Studio Code是一個很好的選擇,但如果您希望獲得現有Visual C ++項目的最佳體驗或在Windows上進行調試,我們建議您使用Visual Studio IDE的一個版本例如Visual Studio社區 。 
如果您遇到任何問題或有關於Microsoft C / C ++擴展的建議 ,請在GitHub上提交問題和建議 。 如果您尚未提供反饋,請參加此快速調查,以幫助您根據需要制定此擴展程序。 
入門 
要安裝Microsoft C / C ++擴展,請執行以下操作: 
打開VS代碼。 
單擊補充工具欄上的“擴展視圖”圖標。 
搜索c++ 。 
單擊“ 安裝” ,然后單擊“ 重新加載” 。 

安裝C / C ++擴展后,打開包含C / C ++源代碼的文件夾。 VS Code會將各種設置文件放入.vscode子文件夾中。 
注意 :C / C ++擴展不包括C ++編譯器或調試器。 您需要安裝這些工具或使用計算機上已安裝的工具。 流行的C ++編譯器是用於Windows的mingw-w64 ,用於macOS的XCode的 Clang和用於Linux的GCC 。 確保您的編譯器可執行文件位於您的平台路徑中,以便擴展程序可以找到它。 該擴展還支持Windows的Windows子系統 。 
配置IntelliSense 
擴展程序將嘗試根據您在系統上找到的編譯器確定文件夾的基本配置信息。 如果由於任何原因,該配置不完整,您可以通過從命令選項板運行C / Cpp:Edit配置命令生成c_cpp_properties.json文件( Ctrl+Shift+P並添加缺失信息。 
如果找不到#include文件或其中一個依賴項,您還可以單擊include語句下的紅色曲線來查看有關如何更新配置的建議。 

這將生成一個c_cpp_properties.json文件,該文件允許您添加其他路徑並定義以正確啟用代碼導航和自動完成。 
下面您可以看到MinGW C ++編譯器已被設置為Windows的默認編譯器。 擴展將使用該信息來確定系統包含路徑和定義,以便不需要將它們添加到c_cpp_properties.json 。 
 { " name ": "Win32" , " includePath ": [ "${workspaceFolder}" ] , " defines ": [ "_DEBUG" , "UNICODE" ] , " compilerPath ": "C:\\mingw-w64\\bin\\gcc.exe" , " intelliSenseMode ": "clang-x64" , " browse ": { " path ": [ "${workspaceFolder}" ] , " limitSymbolsToIncludedHeaders ": true , " databaseFilename ": "" } } 
構建代碼 
如果要從VS Code構建應用程序,則需要生成tasks.json文件: 
打開命令選項板 ( Ctrl+Shift+P )。 
選擇Tasks:Configure Task命令,單擊模板中的Create tasks.json文件 ,您將看到任務運行器模板列表。 
選擇Others以創建運行外部命令的任務。 
將command更改為用於構建應用程序的命令行表達式(例如g++ )。 
添加任何必需的args(例如-g構建用於調試)。 
您還可以將label更改為更具描述性。 
您現在應該在工作區.vscode文件夾中看到.vscode文件,其類似於: 
 { " version ": "2.0.0" , " tasks ": [ { " label ": "build hello world" , " type ": "shell" , " command ": "g++" , " args ": [ "-g" , "helloworld.cpp" ] } ] } 
如果您希望能夠使用任務構建應用程序:運行構建任務 ( Ctrl+Shift+B ),您可以將其添加到build組。 
 { " version ": "2.0.0" , " tasks ": [ { " label ": "build hello world" , " type ": "shell" , " command ": "g++" , " args ": [ "-g" , "helloworld.cpp" ] , " group ": { " kind ": "build" , " isDefault ": true } } ] } 
有關任務的更多信息,請參閱通過任務與外部工具集成 。 
調試代碼 
要啟用調試,您需要生成launch.json文件: 
單擊補充工具欄中的“調試”圖標,導航到“調試”視圖。 
在“ 調試”視圖中,單擊“ 配置”圖標。 
從“ 選擇環境”下拉列表中選擇C++ (GDB/LLDB) (使用GDB或LLDB)或C++ (Windows) (以使用Visual Studio Windows調試程序)。 這將創建一個launch.json文件,以便使用兩種配置進行編輯: 
C ++ Launch定義了在開始調試時啟動應用程序的屬性。 
C ++ Attach定義了附加到已經運行的進程的屬性。 
使用您正在調試的程序的路徑更新program屬性。 
如果您希望在開始調試時構建應用程序,請添加一個preLaunchTask屬性,其中包含您在tasks.json創建的構建任務的名稱(上例中的“構建hello world”)。 
下面是使用MinGW GDB調試器的示例: 
 { " version ": "0.2.0" , " configurations ": [ { " name ": "(gdb) Launch" , " type ": "cppdbg" , " request ": "launch" , " program ": "${workspaceFolder}/a.exe" , " args ": [] , " stopAtEntry ": false , " cwd ": "${workspaceFolder}" , " environment ": [] , " externalConsole ": true , " MIMode ": "gdb" , " miDebuggerPath ": "C:\\mingw\\bin\\gdb.exe" , " setupCommands ": [ { " description ": "Enable pretty-printing for gdb" , " text ": "-enable-pretty-printing" , " ignoreFailures ": true } ] , " preLaunchTask ": "build hello world" } ] } 
要了解更多信息,請參閱配置launch.json以進行C / C ++調試 。 
如果在Windows上使用GDB進行調試,請參閱使用GDB進行Windows調試 。 
編輯代碼 
代碼格式 
Visual Studio Code的C / C ++擴展支持使用擴展名附帶的clang格式進行源代碼格式化。 
您可以使用格式文檔 ( Shift+Alt+F )格式化整個文件,也可以使用格式選擇格式化當前選擇( Ctrl+K Ctrl+F右鍵單擊上下文菜單中的Ctrl+K Ctrl+F )。 您還可以使用以下設置配置自動格式化: 
editor.formatOnSave - 保存文件時格式化。 
editor.formatOnType - 在鍵入時格式化(在;字符上觸發)。 
默認情況下,clang格式樣式設置為“file”,這意味着它在工作.clang-format查找.clang-format文件。 如果找到.clang-format文件,則根據文件中指定的設置應用格式。 如果在工作空間中找不到.clang-format文件,則會根據C_Cpp.clang_format_fallbackStyle 設置中指定的默認樣式應用格式設置 。 目前,默認格式樣式是“Visual Studio”,它是Visual Studio中默認代碼格式化程序的近似值。 
“Visual Studio”clang格式樣式還不是官方的OOTB clang格式樣式,但它暗示了以下clang格式設置: 
 UseTab: (VS Code current setting) IndentWidth: (VS Code current setting) BreakBeforeBraces: AllMan AllowShortIfStatementsOnASingleLine: false IndentCaseLabels: false ColumnLimit: 0 
如果您要使用與擴展附帶的clang格式不同的clang格式,可以使用C_Cpp.clang_format_path 設置並將其值設置為安裝clang格式二進制文件的路徑。 
例如,在Windows平台上: 
 "C_Cpp.clang_format_path" : "C:\\Program Files (x86)\\LLVM\\bin\\clang-format.exe" 
自動完成 
自動完成由與Visual Studio相同的引擎提供支持。 當您的工作區配置了所有必需的包含路徑和定義時,您將獲得最相關的建議(請參閱上面的“配置IntelliSense”部分)。 
導航代碼 
C / C ++擴展提供的源代碼導航功能是理解和繞過代碼庫的強大工具。 這些功能由存儲在符號信息的離線數據庫中的標簽提供支持。 安裝了C / C ++擴展后,只要將包含C ++源代碼文件的文件夾加載到VS代碼中,就會生成此數據庫。 當標記解析器生成此信息時,數據庫圖標將顯示在活動配置名稱旁邊(下圖中的“Win32”)。 

當圖標消失時,源代碼符號已在脫機數據庫中標記。 
指定其他包含目錄以獲得更好的符號支持 
為了提供最佳體驗,VS Code的C / C ++擴展需要知道它在哪里可以找到代碼中引用的每個頭文件。 默認情況下,擴展名搜索當前源目錄,其子目錄和某些特定於平台的位置。 如果找不到引用的頭文件,VS Code會在引用它的每個#include指令下面顯示綠色波形。 
要指定要搜索的其他包含目錄,請將光標放在顯示綠色波浪線的任何#include指令上,然后在出現時單擊燈泡操作。 這將打開文件c_cpp_properties.json進行編輯; 在這里,您可以通過向“browse.path”屬性添加更多目錄來單獨為每個平台配置指定其他包含目錄。 
搜索符號 
您可以在當前文件或工作區中搜索符號,以便更快地導航代碼。 
要在當前文件中搜索符號,請按Ctrl+Shift+O ,然后輸入您要查找的符號的名稱。 將顯示潛在匹配列表,並在您鍵入時進行過濾。 從匹配列表中選擇以導航到其位置。 

要在當前工作空間中搜索符號,請按Ctrl+T ,然后輸入符號的名稱。 潛在匹配列表將如前所示。 如果您選擇的文件尚未打開,則會在導航到匹配位置之前打開該文件。 

或者,如果您願意,可以通過命令選項板訪問這些命令來搜索符號。 使用快速打開 ( Ctrl+P )然后輸入'@'命令搜索當前文件,或輸入''命令搜索當前工作區。 Ctrl+Shift+O和Ctrl+T分別只是'@'''命令的快捷方式,所以一切都是一樣的。 
窺視定義 
您可以使用Peek Definition功能快速查看符號的定義方式。 此功能在窺視窗口內的定義附近顯示幾行代碼,因此您可以在不離開當前位置的情況下查看。 
要查看符號的定義,請將光標放在源代碼中使用的任何位置的符號上,然后按Alt+F12 。 或者,您可以從上下文菜單中選擇Peek Definition (右鍵單擊,然后選擇Peek Definition )。 

目前,C / C ++擴展不會以某種方式解析代碼,以幫助它根據符號的使用方式區分競爭定義。 當符號在不同的上下文中定義不同的事物時會出現這些競爭定義,例如在重載函數,類及其構造函數以及其他情況下發生。 發生這種情況時,每個競爭定義都列在窺視窗口的右側,當前選擇的源代碼顯示在左側。 
打開窺視窗口,瀏覽競爭定義列表以找到您感興趣的定義。如果要導航到其中一個定義的位置,只需雙擊您感興趣的定義,或者按雙擊查看窗口左側顯示的源代碼中的任意位置。 
轉到定義 
您還可以使用“轉到定義”功能快速導航到定義符號的位置。 
要轉到符號的定義,請將光標放在源代碼中使用的符號上,然后按F12 。 或者,您可以從上下文菜單中選擇“ 轉到定義 ”(右鍵單擊,然后選擇“ 轉到定義” )。 如果只有一個符號定義,您將直接導航到其位置,否則競爭定義將顯示在上一節中所述的查看窗口中,您必須選擇要轉到的定義。 
調試 
按照“ 入門”中的說明設置調試環境的基礎知識后,您可以在本節中了解有關調試C / C ++的更多詳細信息。 
VS Code支持以下C / C ++調試器,具體取決於您使用的操作系統: 
Linux :GDB 
macOS :LLDB或GDB 
Windows :Visual Studio Windows調試器或GDB(使用Cygwin或MinGW) 
使用GDB進行Windows調試 
您可以使用VS Code調試使用Cygwin或MinGW創建的Windows應用程序。 要使用Cygwin或MinGW調試功能,必須在啟動配置( launch.json )中手動設置調試器路徑。 要調試Cygwin或MinGW應用程序,請添加miDebuggerPath屬性並將其值設置為Cygwin或MinGW環境的相應gdb.exe的位置。 
例如: 
 "miDebuggerPath" : "c:\\mingw\\bin\\gdb.exe" 
Windows上的Cygwin / MinGW調試支持附加和啟動調試方案。 
條件斷點 
條件斷點使您只有在條件的值為true時才能在特定代碼行上中斷執行。 要設置條件斷點,請右鍵單擊現有斷點,然后選擇“ 編輯斷點” 。 這將打開一個小的查看窗口,您可以在其中輸入必須評估為true的條件,以便在調試期間命中斷點。 

在編輯器中,條件斷點由斷點符號表示,斷點符號內部有一個黑色等號。 您可以將光標放在條件斷點上以顯示其條件。 
功能斷點 
函數斷點使您能夠在函數的開頭而不是在特定的代碼行上中斷執行。 要設置函數斷點,請在“ 調試”窗格中右鍵單擊“ 斷點”部分,然后選擇“ 添加函數斷點”並輸入要在其上執行的函數的名稱。 
表達評估 
VS Code支持在幾種情況下進行表達式評估: 
您可以在“ 調試”面板的“ 監視”部分中鍵入表達式,並在每次遇到斷點時對其進行評估。 
您可以在調試控制台中鍵入表達式,它只會被評估一次。 
您可以在斷點處停止時評估代碼中出現的任何表達式。 
請注意, Watch部分中的表達式在正在調試的應用程序中生效; 修改變量值的表達式將在程序的持續時間內修改該變量。 
多線程調試 
VS Code的C / C ++擴展能夠調試多線程程序。 所有線程及其調用堆棧都顯示在“ 調用堆棧”部分中: 

內存轉儲調試 
VS Code的C / C ++擴展還具有調試內存轉儲的能力。 要調試內存轉儲,請打開launch.json文件並將coreDumpPath (對於GDB或LLDB)或dumpPath (對於Visual Studio Windows調試器)屬性添加到C ++啟動配置,將其值設置為包含路徑的字符串。內存轉儲。 這甚至適用於在x64機器上調試的x86程序。 
附加符號 
如果存在調試器可以找到符號文件的其他目錄(例如,Visual Studio Windows調試器的.pdb文件),則可以通過添加additionalSOLibSearchPath (對於GDB或LLDB)或symbolSearchPath (對於Visual Studio Windows調試器)來指定它們。 )。 
例如: 
 "additionalSOLibSearchPath" : "/path/to/symbols;/another/path/to/symbols" 
要么 
 "symbolSearchPath" : "C:\\path\\to\\symbols;C:\\another\\path\\to\\symbols" 
找到源文件 
如果源文件不在編譯位置,則可以更改源文件位置。 這是通過sourceFileMap部分中添加的簡單替換對完成的。 將使用此列表中的第一個匹配項。 
例如: 
 "sourceFileMap" : { " /build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include/i686-linux-gnu ": "/usr/include/i686-linux-gnu/c++/4.8" , " /build/gcc-4.8-fNUjSI/gcc-4.8-4.8.4/build/i686-linux-gnu/libstdc++-v3/include ": "/usr/include/c++/4.8" } 
GDB,LLDB和MI命令(GDB / LLDB) 
對於C++ (GDB/LLDB)調試環境,您可以使用-exec命令直接通過調試控制台執行GDB,LLDB和MI命令,但要小心,直接在調試控制台中執行命令是未經測試的,並且可能會導致VS Code崩潰一些案例。 
其他調試功能 
無條件斷點 
觀察窗口 
調用堆棧 
步進 
有關使用VS Code進行調試的更多信息,請參閱VS Code中的調試簡介。 
已知限制 
符號和代碼導航 
所有平台: 
因為擴展不解析函數體,所以Peek Definition和Go to Definition不適用於函數體內定義的符號。 
調試 
視窗: 
Cygwin和MinGW上的GDB無法打破正在運行的進程。 要在應用程序運行時設置斷點(未在調試器下停止),或暫停正在調試的應用程序,請在應用程序終端中按Ctrl-C 。 
Cygwin上的GDB無法打開核心轉儲。 
Linux的: 
GDB需要提升權限才能附加到進程。 使用attach進行處理時 ,需要在調試會話開始之前提供密碼。 
蘋果系統: 
LLDB: 
使用LLDB進行調試時,如果在中斷模式下關閉終端窗口,則調試不會停止。 按“ 停止”按鈕可以停止調試。 
停止調試時,終端窗口未關閉。 
GDB: 
需要完成其他手動安裝步驟才能在macOS上使用GDB。 請參閱自述文件中的手動安裝GDB for OS X. 
使用GDB附加到進程時,無法中斷正在調試的應用程序。 GDB將僅綁定應用程序未運行時設置的斷點(在連接到應用程序之前或應用程序處於停止狀態時)。 這是由於GDB中的一個錯誤 。 
使用GDB進行調試時無法加載核心轉儲,因為GDB 不支持macOS中使用的核心轉儲格式 。 
當使用GDB附加到進程時,break-all將結束該進程。 
下一步 
請繼續閱讀以了解: 
基本編輯 - 了解強大的VS代碼編輯器。 
代碼導航 - 快速瀏覽源代碼。 
任務 - 使用任務來構建項目等 
調試 - 了解如何在項目中使用調試器 
常見問題 
我的項目不會加載 
VS Code目前不支持C ++項目文件,而是將您選擇的目錄視為項目的工作區。 該目錄及其子目錄中的源代碼文件是工作區的一部分。 
如何構建/運行我的項目? 
VS Code支持您可以配置以構建應用程序的任務,並且本機地了解MSBuild,CSC和XBuild的輸出。 有關更多信息,請參閱任務文檔。 
如果您有任何其他問題或遇到任何問題,請在GitHub上提出問題。 

最后更新於2017年8月22日
VS Code官方文檔(谷歌翻譯)

 必應網頁翻譯VSCode官方文檔結果:https://www.translatetheweb.com/?from=en&to=zh-CHS&dl=en&a=https%3A%2F%2Fcode.visualstudio.com%2Fdocs%2Flanguages%2Fcpp


 

 

目錄結構如下

“項目目錄”

+.vscode目錄

  ++ c_cpp_properties.json

  ++ launch.json

  ++ tasks.json

+多個c源文件*.c

 按下編譯快捷鍵F5會編譯當前打開的單個文件(比如同時開了1.c 2.c但是光標選中的是2.c,那么就只編譯2.c)

 

這樣就初步配置完成了,如果需要更高級的功能,請查看微軟Visual Studio Code的文檔

每次使用都需要先打開“項目”目錄,然后該IDE會讀取.vscode子目錄配置文件。

因此我們可以將配置好的.vscode目錄備份起來,以后要新建“項目”,直接就把該目錄放置到“項目”目錄,然后打開"項目"目錄即可。

當然,這三個文件也適用於VS2017最新版 對 Visual Studio 中 C++ 生成系統的“打開文件夾”支持 | Microsoft Docs

 

附上:

 在VScode上配置Git - 知乎 

 

VSCode插件之Code Runner (只能run不能調試)

附上Code Runner解決運行程序中文亂碼問題的方案

https://www.cnblogs.com/yucloud/p/10259681.html#VSCode_zh

 

6,讓Msys2更順手

Msys2 更舒適的配置https://www.jianshu.com/p/0e24ee498f2b

 

 

PS. VScode編譯單個源文件特別方便,用來和VS2017互補非常棒。(雖然VS2017新版也實現了和c/cpp插件一樣地利用JSON自動化編譯)

 最后附上:Cygwin、MinGw、mingw-w64,MSys msys2區別與聯系 - zengkefu - 博客園

 

其實這三個文件的配置,把鼠標懸浮在配置上面,vscode會告訴你作用和值范圍,這些都很簡單的,難的是自身英文水平 和使用搜索引擎的能力

假如把vscode給的那短短的docs都讀懂,把c語言gcc編譯器的參數、預編譯命令等知識都搜索一遍,那配置就輕而易。(當然我都做不到,或者說不願意去做,emmm......)

 

 

附LINUX的glibc找不到標准庫函數源碼的解決方案

glibc問題(Linux) 

如果你在Linux上配置VSCode,單步調試時就會發現一個報錯:Unable to open 'malloc.c': File not found (file:///build/glibc-kAz5Pl/glibc-2.27/malloc/malloc.c). 之類的提示,

注意: 這里的 glibc-kAz5Pl 最后一個字母是小寫的 L (即 jklmn 的 l )

記得安裝 gdb 哦(apt install gdb && apt-mark auto gdb)

解決方案有兩種:

1. [在kali下使用gdb以源碼方式調試glibc](推薦,debian系通用)然后把glibc-2.27復制到VSCode要求的目錄 build/glibc-kAz5Pl/ 里即可

2.  就是在glibc下載網站搜索build/后面那段glibc-2.27,然后下載並解壓到根目錄下的build目錄(沒有就自己建) {沒找到gnu的鏡像源,只能默默忍受dns污染和牆體的光輝了}

另外參考 怎么查看gcc默認的include路徑 :

     Linux下是                 gcc -v -x c -E /dev/null 

     Windows下是           gcc -v -x c -E NUL

      然后找到輸出內容中的 #include <...> search starts here:

 然后c_cpp_properties.json的 includePath 如下

"includePath": [
                "/usr/lib/gcc/x86_64-linux-gnu/7/include",
                "/usr/local/include",
                "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed",
                "/usr/include/x86_64-linux-gnu",
                "/usr/include",
                "${workspaceFolder}/**"
],

 

 

關於glibc(好像又稱LLD)  :

由於 glibc (GNU C Library) 比 libc(ANSI C Library) 更符合 Linux, 所以 glibc 漸漸成為 Linux 的"標准庫", 而 libc 漸漸不再維護

參考: [libc、glibc和glib的關系]

 

 

 

 

 


 

關於學習的理念

學習編程,最好就是對工具和整體都有一個正確、完整的理解。從命令行理解是最好的,因為你能一步步地理解程序執行的過程,再加以調試,基本上整個軟件層面都能透徹理解。

比如HelloWord.c 你可以開始使用命令行理解它

 

 1 #include <stdio.h>
 2 // 這是一個HelloWorld演示 
 3 
 4 int main(void) {
 5     int a = 2019; 
 6     int c = a - 1949;        // 我們在exe里看不到c的值的,因為沒有打印出來,
 7                             //但是我們可以用調試器獲取這個值
 8     printf("Hello World!");
 9     return 0;
10 }
HelloWorld.c

 

(tab鍵盤可以部分智能猜測路徑/命令補全)

編譯方面

請先配置好 MingW64

[cmd] cd /d E:\MySource\    定位到HelloWorld所在路徑E:\MySource\ 

[cmd] gcc HelloWorld.c -o HelloWorld.exe  使用gcc[Mingw64] 編譯HelloWorld.c並輸出為HelloWorld.exe

[cmd]  ./HelloWorld.exe          在當前已經定位路徑,啟動HelloWorld.exe,這個就是運行

調試方面

[cmd] gcc -g HelloWorld.c -o HelloWorld.exe    重新編譯一次,這次用了-g參數,給exe里加上了調試信息,以便於gdb使用

[cmd] gdb HelloWorld.exe            使用gdb進行調試,由於上面加上了調試信息,所以我們能看到

(gdb) break 1        把斷點打在源碼第1行,不懂的話可以打help看幫助

(gdb) r           Run的簡寫,運行

(gdb) n            Next的簡寫,下一行

你可以一直執行到int c = a - 1949 的下一行開頭即 printf("Hello World!");

(gdb) info local a      查看和變量a相關的值

會顯示:

        a = 2019
        c = 70

怎么樣,好玩吧!這個就是調試

當然你還可以查看匯編源碼:

 quit退出

 

這個過程你已經了解了:

在Windows里雙擊運行exe時,系統幫你做了什么(當然是簡化版,實際上Windows還有一些安全措施之類的)

    它先定位到路徑,然后才運行。

在計算機里,程序是一步步運行的

    所以調試能讓你快速理解程序和編程,也能讓你看到每個數據的變化

當然還有很多有趣的東西,多線程什么的原來不是真正的同步執行,命令行參數原來離我們學生學C語言並不遠,僅僅是學校沒有教而我們也不願意去探索去看國外優秀經典書籍如C Primer Plus  請看鏈接:C程序獲取命令行參數   想了解更多有趣的東西,可以看我其他博文,雖然沒有這篇好,但是也導出了很多探索路線

擁有思想理念地去編程,會給你帶來一個不一樣、精彩的世界觀

附上:Linux下gdb的安裝及使用入門

拓展學習(就算不學也建議仔細了解一下):

  1. 習慣常用的命令操作,理解圖形化的思想(做到不討厭命令行也不小看圖形化,把命令行和圖形化操作看作同一地位,這樣的思維對 個人進步 和 工程開發  大有脾益)
  2. gdb           是C/C++調試器,也是眾多衍生語言(如Java)的調試器基礎,學會gdb,就能熟悉各種編程語言、IDE的調試
  3. Makefile    一種針對復雜工程自動化編譯的腳本文件,有利於理解各種IDE原理
  4. git             分布式版本控制工具
  5. Linux        因為這些gcc、gdb都是從Linux移植過來的,Windows原生編譯調試器好像只有MSVC
  6. 學會使用第三方的庫,如npcap、Mysql的C api等(需要相關的知識體系,如網絡或數據庫的一點點知識)

     如果想寫命令行程序,見 main函數的參數(int argc,char *argv[]) 或參考書籍《C Primer Plus 第五版》

本文關鍵詞檢索:Windows , Windows10 , Win10 , MSYS2 , MinGw , MinGw-w64 , .vscode ,  c_cpp_properties.json , launch.json , tasks.json , VScode , 寫c , c語言 , Visual Studio Code


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM