更正了顺序,之前不知道怎么回事,内容顺序乱了
力求完美、详细,所以希望懂的人留言指点一下。
目前已经开始添加原理解释,希望大家能分享一些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示例):
修改源脚本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 }
再安装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。但更小、更快,更易解析, 也非常易读 (把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 }
更新一下说明:当需要第三方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
会生成第二个文件:
修改内容如下:
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 }
[这部分完全是 GDB、cmd命令行知识、全局环境变量、利用脚本启动其他exe 的知识]
至于变量的使用,看微软文档:https://code.visualstudio.com/docs/editor/variables-reference
再配置编译的脚本
还是,快捷键Ctrl+Shift+P键入并运行
Tasks: Configure Task
然后点击“Create tasks.json file from templates”再选择“Others”,
会生成第三个文件:
修改内容如下:
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 }
[完全是 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: 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日
必应网页翻译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上配置了,单步调试时你会发现一个bug:Unable to open 'malloc.c': File not found (file:///build/glibc-kAz5Pl/glibc-2.27/malloc/malloc.c). 之类的提示,解决方案 就是在glibc下载网站搜索build/后面那段glibc-2.27,然后下载并解压到根目录下的build目录(没有就自己建)
关于glibc(好像又称LLD) C 函数库 (libc,glibc,uClibc,newlib) - dpc525 - 博客园 没找到gnu的镜像源,只能默默忍受dns污染和墙体的光辉了
关于学习的理念
学习编程,最好就是对工具和整体都有一个正确、完整的理解。从命令行理解是最好的,因为你能一步步地理解程序执行的过程,再加以调试,基本上整个软件层面都能透彻理解。
比如HelloWord.c 你可以开始使用命令行理解它
HelloWorld.c1 #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 }
(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
来源:oschina
链接:https://my.oschina.net/u/4354143/blog/4266852