【VSCode C/C++运行代码带参数Debug调试和Run运行代码】
1. 安装C/C++编译器
1.1 官方链接,MSYS2 C/C++编译器
https://www.msys2.org/
1.2 下载MSYS2编译器
点击
msys2-x86_64-20240507.exe
下载安装即可。
1.3 安装依赖环境
安装完成
MSYS2
之后,打开
MSYS2 MINGW64
。
MSYS2 MINGW64
:用来编译Windows平台64位程序MSYS2 MINGW32
:用来编译Windows平台32位程序
1.4 更新包数据库
pacman -Syu
1.5 安装 GCC 编译器
pacman -S gcc
1.6 安装 Make 工具
pacman -Smake
1.7 安装cmake工具
pacman -S cmake
1.8 或者一键安装依赖环境
pacman -S base-devel mingw-w64-x86_64-toolchain
pacman -S cmake
1.9 配置环境变量
替换为自己的安装路径
C:\msys64\mingw64\bin
1.10 验证环境变量配置
gcc --version
g++ --version
mingw32-make --version
2.创建工程项目
2.1 创建一个main.c代码文件
新建一个文本文档,然后重命名为mian.c
2.2 通过Code打开。
鼠标右键,通过Code打开。
可以看到,目前C工程项目下,还没有.vscode隐藏目录。隐藏目录下面也没有c_cpp_properties.json、launch.json、 tasks.json和settings.json配置文件。
3.安装插件
3.1 点击扩展Extensions图标
3.2 输入搜索
C/C++ Extension Pack
安装
C/C++ Extension Pack
即可。
![输入搜索`C/C++ Extension Pack](https://img-blog.csdnimg.cn/direct/64b86e5210ac432b88a376f9f17d66de.png)
4. 配置文件
4.1 c_cpp_properties.json
这个文件是VSCode C/C++扩展(由Microsoft提供)特有的配置文件,用于配置C/C++项目的编译器、标准库路径、编译器选项等。这些设置帮助VSCode提供准确的代码完成功能、语法高亮、错误检查等。
- 路径包含:指定编译器用于查找头文件的目录。
- 编译器路径:指定项目使用的编译器。
- C/C++标准:指定使用的C或C++语言标准。
- IntelliSense模式:设置适配的IntelliSense行为,以匹配选择的编译器和平台。
自动生成c_cpp_properties.json配置文件。键盘快捷键
Ctrl+Shift+P
,选择
C/C++: Edit Configurations (UI)
默认的配置文件
自动生成默认的配置文件内容
修改
C/C++ Configurations
内容会自动同步到
c_cpp_properties.json
修改
C/C++ Configurations
内容如下
选择编译器的路径
IntelliSense" 是一个强大的代码完成助手,它提供了自动完成、代码导航、语法提示、参数信息、快速信息等功能。选择
gcc-x64 (legeacy)
C语言和C++语言标准版本选择C11和C++11
c_cpp_properties.json
内容自动同步如下
{"configurations":[{"name":"Win32",
"includePath":["${workspaceFolder}/**"],
"defines":["_DEBUG",
"UNICODE",
"_UNICODE"],
"windowsSdkVersion":"10.0.22621.0",
"compilerPath":"C:/msys64/mingw64/bin/gcc.exe",
"cStandard":"c11",
"cppStandard":"c++11",
"intelliSenseMode":"gcc-x64"}],
"version":4}
4.2 launch.json
这个文件用于配置VSCode的调试设置,是使用VSCode内置的调试功能(或连接到外部调试器)时必须配置的文件。它指定了调试器的类型、调试目标程序的路径、必要的调试参数等。
- 配置调试会话:如何启动调试器、使用哪个执行文件、传递给程序的参数、环境变量等。
- 特定语言的调试配置:如Python、JavaScript、C++等语言特定的调试选项。
自动生成
launch.json
配置文件。点击
Run and Debug
按钮
点击
create a launch.json file
按钮
选择
C++ (GDB/LLDB)
生成默认的
launch.json
文件
修改内容如下
{"version":"0.2.0",
"configurations":[{"name":"Launch", // 配置名称
"type":"cppdbg", // 使用cppdbg类型
"request":"launch", // 启动类型请求
"program":"${fileDirname}\\${fileBasenameNoExtension}.exe", // 你的可执行文件路径
"args":["Hello", "World"], // 如果需要,添加程序参数
"stopAtEntry": false, // 是否在入口点停止
"cwd":"${workspaceFolder}", // 当前工作目录
"environment":[], // 环境变量
"externalConsole": true, // true使用外部控制台,false使用内部控制台
"MIMode":"gdb", // 调试器模式
"miDebuggerPath":"C:/msys64/mingw64/bin/gdb.exe", // gdb路径
"setupCommands":[ // 初始命令
{"description":"Enable pretty-printing for gdb",
"text":"-enable-pretty-printing",
"ignoreFailures":true}],
"preLaunchTask":"Build", // 如果有构建任务,可以指定
"internalConsoleOptions":"openOnSessionStart" // 控制台选项
}]}
其中,参数修改如下
miDebuggerPath
:gdb调试程序。需要改为自己的msys64安装路径externalConsole
:是否使用外部控制台输出调试信息。preLaunchTask
:调试之前,构建用于task.json
创建的任务名称
4.3 tasks.json
这个文件用于配置VSCode的任务运行器,可以定义和配置自动执行的任务,如编译、测试等。这在构建或部署项目时特别有用。
- 自定义任务:编译项目、执行脚本、启动服务等。
- 任务组:将多个任务组合在一起,按顺序或并行执行。
自动生成
tasks.json
配置文件。
测试代码
#include<stdio.h>#include<stdlib.h>#include<sys/time.h>#include<time.h>intmain(int argc,char*argv[]){structtimeval tv;// timeval结构用于存储秒和微秒structtm* tm_info;// 用于存储本地时间信息char buffer[40];// 字符数组,用于存储格式化的时间字符串int milliseconds;// 存储毫秒部分time_t time_sec;// 添加一个time_t类型的变量// 获取当前时间gettimeofday(&tv,NULL);// 将tv.tv_sec转换为time_t类型
time_sec =(time_t)tv.tv_sec;// 将秒数转换为本地时间
tm_info =localtime(&time_sec);// 将微秒转换为毫秒
milliseconds = tv.tv_usec /1000;// 格式化时间字符串,年月日时分秒strftime(buffer,sizeof(buffer),"%Y-%m-%d %H:%M:%S", tm_info);system("chcp 65001 > nul");// 设置命令行编码为UTF-8并隐藏输出// 打印格式化的时间和毫秒printf("当前时间: %s.%03d\n", buffer, milliseconds);printf("There are %d command-line arguments:\n", argc);for(int i =0; i < argc; i++){printf("Argument %d: %s\n", i, argv[i]);}// 终端暂停system("pause");return0;}
自动生成
settings.json
配置文件。切换到
Run and Debug
按钮,点击绿色小箭头或者按键F5调试。
点击
configure Task
按钮
选择第二个
C/C++: gcc.exe build active file
,对应MSYS2编译器的路径
默认生成的配置文件内容
{"version":"2.0.0",
"tasks":[{"type":"cppbuild",
"label":"C/C++: gcc.exe build active file",
"command":"C:/msys64/mingw64/bin/gcc.exe",
"args":["-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"],
"options":{"cwd":"C:/msys64/mingw64/bin"},
"problemMatcher":["$gcc"],
"group":"build",
"detail":"compiler: C:/msys64/mingw64/bin/gcc.exe"}]}
!!!注意,修改label参数,这里的label参数对应了launch.json的preLaunchTask参数.
launch.json
文件内容
tasks.json
文件内容
修改后的
tasks.json
文件内容
{"version":"2.0.0",
"tasks":[{"type":"cppbuild",
"label":"Build",
"command":"C:/msys64/mingw64/bin/gcc.exe",
"args":["-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"],
"options":{"cwd":"C:/msys64/mingw64/bin"},
"problemMatcher":["$gcc"],
"group":"build",
"detail":"compiler: C:/msys64/mingw64/bin/gcc.exe"}]}
4.4 settings.json
这个文件用于存储VSCode的工作区或用户级的设置。这些设置可以覆盖VSCode的默认行为,包括编辑器的视觉样式、代码格式化规则、插件配置等。
- 工作区设置:特定于当前工作区的设置(如字体大小、缩进大小、行为扩展等)。
- 全局/用户设置:适用于所有VSCode实例的设置。
自动生成
settings.json
配置文件。键盘快捷键
Ctrl+,
,打开
Settings
。
切换到
Workspace
选择
Auto Save
自动保存功能,改为
afterDelay
自动保存代码修改。
同时
settings.json
文件自动生成,会自动覆盖掉用户设置的功能。
settings.json
配置文件内容文件
5. Debug
5.1 调试代码
切换回main.c代码文件,点击F9在需要停止运行的行打上断点,点击F5开始调试代码。
代码运行到断点出停止,左边可以看到局部变量和寄存器的值。
5.2 代码调试快捷键
F5 - 继续/开始调试
- 作用:开始调试会话,或者从中断点(断点)处继续执行程序。
- 用途:当你设置了断点并希望程序运行到这些断点时停下,可以使用
F5
来继续执行直到下一个断点。如果程序尚未运行,F5
将启动调试会话。
F10 - 逐行执行(不进入函数内部)
- 作用:执行下一行代码,但不进入任何函数内部(即如果下一行代码是一个函数调用,它会执行该函数但不跳到函数里面去)。
- 用途:用于当你想看程序的执行流程但不想深入每个函数的细节时。它允许你快速跳过函数调用,只关注当前执行流的高层次变化。
F11 - 逐行执行(进入函数内部)
- 作用:执行下一行代码,如果这行代码是一个函数调用,将进入该函数内部。
- 用途:当你需要详细查看函数内部的执行过程和逻辑时使用。它允许你深入每个函数调用,理解函数的具体行为和局部变量状态。
Shift+F11 - 跳出当前函数
- 作用:从当前正在执行的函数中跳出,返回到函数被调用的位置。
- 用途:当你在函数内部但想跳出这个函数,继续在调用后的执行点执行时使用。这在你已经了解函数内部行为,或当你误入一个函数且不希望继续在其中时非常有用。
6. Run
不调试,直接运行代码。选择代码文件,点击右上角的小三角按钮旁边的下拉栏,选择
Run C/C++ File
。
选择第一个
Launch preLaunchTask: Build
,和
launch.json
配置文件里面的对应
运行后,程序不会在断点处停止。
可以看到调试后生成的可执行文件。
7. 可能遇到的问题
launch.json
配置文件的preLaunchTask
参数留空或者参数名称和tasks.json
配置文件的label
参数名称不一致。
版权归原作者 Ztiddler 所有, 如有侵权,请联系我们删除。