VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)
力求完美、详细,望各位留言指点
目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接
后续会慢慢增添内容,修正不足。 希望这篇文章能带大家入坑。
Ps.2019年消息:VSCODE已支持全局配置,C/Cpp插件也支持UI界面设置。 具体请看官网或利用搜索引擎寻找资料
请耐心看完,因为这能让你了解什么是IDE、调试、运行和命令行以及系统和程序之间的关系
如果只是想找三个文件的配置方法,请点下面导航。(其实这三个文件配置并不难,难的是没用过gcc g++ gdb,当你稍微地使用之后,配置自然是水到渠成)
基本上各平台配置内容的差异只在于那个include路径(疯狂使用搜索引擎),所以只要写下正确路径,其他就没什么大问题了
目录书签导航
- 强烈建议先初步学会使用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示例):
cp /etc/pacman.d/mirrorlist.mingw32 /etc/pacman.d/mirrorlist.mingw32.bak1
sed '/^## msys2.org/a\Server = https://mirrors.ustc.edu.cn/msys2/mingw/i686/' /etc/pacman.d/mirrorlist.mingw32 > /etc/pacman.d/mirrorlist.mingw32.t
mv /etc/pacman.d/mirrorlist.mingw32.t /etc/pacman.d/mirrorlist.mingw32 cp /etc/pacman.d/mirrorlist.mingw64 /etc/pacman.d/mirrorlist.mingw64.bak1
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
mv /etc/pacman.d/mirrorlist.mingw64.t /etc/pacman.d/mirrorlist.mingw64 cp /etc/pacman.d/mirrorlist.msys /etc/pacman.d/mirrorlist.msys.bak1
sed '/^## msys2.org/a\Server = https://mirrors.ustc.edu.cn/msys2/msys/$arch/' /etc/pacman.d/mirrorlist.msys > /etc/pacman.d/mirrorlist.msys.t
mv /etc/pacman.d/mirrorlist.msys.t /etc/pacman.d/mirrorlist.msys 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
#include <stdio.h>
#include <stdlib.h> int main(void) {
printf("HelloWorld!");
system("pause");
return ;
}
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
修改内容如下(注意,这个文件不允许使用注释):
{
"configurations": [
{
"name": "MinGw-w64_Win32",
"includePath": [
"C:\\msys64\\mingw64\\include",
"C:\\msys64\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\8.2.0\\include",
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
], "compilerPath": "C:\\msys64\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
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配置内容,会指定搜索工作目录下的头文件等
VSCODE内置变量 https://code.visualstudio.com/docs/editor/variables-reference
[很明显,上面这部分完全是 gcc配置各种路径 的知识] 不过gcc g++编译器是有区别的,如果用C++还是推荐g++
接下来配置启动/调试程序的脚本
单击补充工具栏(侧边栏)上的“Debug”图标
点击 配置图标,可选方案有如下:
- C++ (GDB/LLDB) (to use GDB or LLDB)
- 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
修改内容如下:
{ //${workspaceFolder} - /home/your-username/your-project
//${workspaceFolderBasename} - your-project
//${file} - /home/your-username/your-project/folder/file.ext
// ${relativeFile} - folder/file.ext
// ${fileBasename} - file.ext
// ${fileBasenameNoExtension} - file
// ${fileDirname} - /home/your-username/your-project/folder
// ${fileExtname} - .ext
// ${lineNumber} - 5
// ${selectedText} - Text selected in your code editor // Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
// "internalConsoleOptions": "neverOpen",
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
"preLaunchTask": "gcc",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
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
修改内容如下:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "gcc",
"type": "shell",
"command": "gcc",
"args":[
// "-std=c11",
"-g",
"-fexec-charset=GBK",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe",
"-Wall",
"-static-libgcc"
]
}
]
}
task.json
[完全是 gcc命令行工具 的知识]
然后,看到"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:
如果您要使用与扩展附带的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插件之Code Runner (只能run不能调试)
附上Code Runner解决运行程序中文乱码问题的方案
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路径 : gcc -v -x c -E /dev/null
然后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 渐渐不再维护
关于学习的理念
学习编程,最好就是对工具和整体都有一个正确、完整的理解。从命令行理解是最好的,因为你能一步步地理解程序执行的过程,再加以调试,基本上整个软件层面都能透彻理解。
比如HelloWord.c 你可以开始使用命令行理解它
#include <stdio.h>
// 这是一个HelloWorld演示 int main(void) {
int a = ;
int c = a - ; // 我们在exe里看不到c的值的,因为没有打印出来,
//但是我们可以用调试器获取这个值
printf("Hello World!");
return ;
}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程序获取命令行参数 想了解更多有趣的东西,可以看我其他博文,虽然没有这篇好,但是也导出了很多探索路线
拥有思想理念地去编程,会给你带来一个不一样、精彩的世界观
拓展学习(就算不学也建议仔细了解一下):
- 习惯常用的命令操作,理解图形化的思想(做到不讨厌命令行也不小看图形化,把命令行和图形化操作看作同一地位,这样的思维对 个人进步 和 工程开发 大有脾益)
- gdb 是C/C++调试器,也是众多衍生语言(如Java)的调试器基础,学会gdb,就能熟悉各种编程语言、IDE的调试
- Makefile 一种针对复杂工程自动化编译的脚本文件,有利于理解各种IDE原理
- git 分布式版本控制工具
- Linux 因为这些gcc、gdb都是从Linux移植过来的,Windows原生编译调试器好像只有MSVC
- 学会使用第三方的库,如npcap、Mysql的C api等(需要相关的知识体系,如网络或数据库的一点点知识)
本文关键词检索:Windows , Windows10 , Win10 , MSYS2 , MinGw , MinGw-w64 , .vscode , c_cpp_properties.json , launch.json , tasks.json , VScode , 写c , c语言 , Visual Studio Code
VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)的更多相关文章
- 配置 Windows 下的 nodejs C++ 模块编译环境 安装 node-gyp
配置 Windows 下的 nodejs C++ 模块编译环境 根据 node-gyp 指示的 Windows 编译环境说明, 简单一句话就是 "Python + VC++ 编译环境&quo ...
- MinGW安装与环境变量配置和Sublime Text 2搭建C++编译环境
MinGW安装与环境变量配置 从http://sourceforge.net/projects/mingw/下载MinGW,安装到D:\MinGW.工具集选择安装(之后还可以进行安装卸载):至少需要安 ...
- 配置 Windows 下的 nodejs C++ 模块编译环境
根据 node-gyp 指示的 Windows 编译环境说明, 简单一句话就是 "Python + VC++ 编译环境". 所有需要的安装文件, 我都下载好放到百度云盘了: nod ...
- 第一篇:《UNIX 环境高级编程》编译环境的搭建
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...
- 《UNIX 环境高级编程》编译环境的搭建( 运行本专栏代码必读 )
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...
- [PHP] php, apache, VS Code安装与配置
1. 下载
- sublime text 2 + Dev-C++/MinGW 组合配置更方便快捷的 C/C++ 编译环境(原创)
首先看一下配置后的效果: 1.直接在底部文本框中显示运行结果(不需要从键盘输入的时候使用): 2.在cmd中运行结果(需要从键盘输入的时候使用): 快捷键说明: 运行: 在底部文本栏显示结果:Ctrl ...
- sublime text 2 + Dev-C++/MinGW 组合配置更方便快捷的 C/C++ 编译环境
首先看一下配置后的效果: 1.直接在底部文本框中显示运行结果(不需要从键盘输入的时候使用): 2.在cmd中运行结果(需要从键盘输入的时候使用): 快捷键说明: 运行: 在底部文本栏显示结果:Ctrl ...
- Nginx安装、配置文档
Nginx介绍 nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发 ...
随机推荐
- 订单1:n支付单 设计讨论
方法一:订单1:1支付单,下单时生成1订单,并生成1支付单(这个支付单是微信需要的相关信息),设置超时时间2小时,如果订单超时,则提示用户,订单已超时,重新下单即可: 方法二:订单1:N支付单,下单时 ...
- python网络爬虫(2)——scrapy框架的基础使用
这里写一下爬虫大概的步骤,主要是自己巩固一下知识,顺便复习一下. 一,网络爬虫的步骤 1,创建一个工程 scrapy startproject 工程名称 创建好工程后,目录结构大概如下: 其中: sc ...
- WPF DataGird 类似Excel筛选效果 未成品
这个本是针对MSDN上所写的代码,不过写一半不想写了. 不想浪费代码,是个半成品的半成品. 效果图: 思路: 利用PopUp来做显示层. 显示层中的数据则是绑定到Datagrid的数据. popup中 ...
- eclipse使用maven,启动工程tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.Contex
maven是个不错的管理jar包工具,但是我们在eclipse使用maven时,总是遇上这样那样的问题,比如今天,我编译工程,启动过后,tomcat报错:java.lang.ClassNotFound ...
- SpringBoot整合PageHelper做多条件分页查询
https://yq.aliyun.com/articles/619586 本篇博客讲述如何在SpringBoot中整合PageHelper,如何实现带多个条件,以及PageInfo中的属性的中文解释 ...
- PIE SDK加载WMS服务数据
1. 功能简介 WMS服务,WMS是OGC标准中比较简单也是比较重要的标准之一.它全称是“Web Map Service”(网络地图服务):利用具有地理空间位置信息的数据制作地图.其中将地图定义为 ...
- 基于第三方vuejs库组件做适配性个性开发
相信大家在使用vuejs时候会用到很多的第三方库,能够找到适合自己的库并且加以使用可以大大加快进度,减少bug.但是很多时候会出现这样一个尴尬的境地: 基线的第三方组件并不能很好地满足我们自己地需求, ...
- JS删除指定下标的元素
在开发过程中,有时我们需要删除数组中某一下标的元素.JAVA中ArrayList有remove函数.但是在JavaScript中没有直接的删除方法.我们可以利用splice来实现.Array.spli ...
- 类初始化应用(class初始化值用函数改变与增添)
class Dataset(object): def __init__(self): self.image_info = [] # 初始化一个列表 def add_image(self, source ...
- Flask路由系统
Flask路由系统 我们之前了解了路由系统是由带参数的装饰器完成的. 路由本质:装饰器和闭包实现的. 设置路由的两种方式 第一种: @app.route('/index') def index(): ...