【VSCode C/C++运行代码带参数Debug调试和Run运行代码】

Ztiddler 2024-10-11 09:35:02 阅读 98

【VSCode C/C++运行代码带参数Debug调试和Run运行代码】

1. 安装C/C++编译器1.1 官方链接,[MSYS2 C/C++编译器](https://www.msys2.org/)1.2 下载MSYS2编译器1.3 安装依赖环境1.4 更新包数据库1.5 安装 GCC 编译器1.6 安装 Make 工具1.7 安装cmake工具1.8 或者一键安装依赖环境1.9 配置环境变量1.10 验证环境变量配置

2.创建工程项目2.1 创建一个main.c代码文件2.2 通过Code打开。

3.安装插件3.1 点击扩展Extensions图标3.2 输入搜索`C/C++ Extension Pack`

4. 配置文件4.1 c_cpp_properties.json4.2 launch.json4.3 tasks.json4.4 settings.json

5. Debug5.1 调试代码5.2 代码调试快捷键F5 - 继续/开始调试F10 - 逐行执行(不进入函数内部)F11 - 逐行执行(进入函数内部)Shift+F11 - 跳出当前函数

6. Run7. 可能遇到的问题

1. 安装C/C++编译器

1.1 官方链接,MSYS2 C/C++编译器

<code>https://www.msys2.org/

1.2 下载MSYS2编译器

点击msys2-x86_64-20240507.exe下载安装即可。

下载MSYS2编译器

1.3 安装依赖环境

安装完成<code>MSYS2之后,打开MSYS2 MINGW64

MSYS2 MINGW64:用来编译Windows平台64位程序MSYS2 MINGW32:用来编译Windows平台32位程序

在这里插入图片描述

终端

1.4 更新包数据库

<code>pacman -Syu

1.5 安装 GCC 编译器

pacman -S gcc

1.6 安装 Make 工具

pacman -S make

1.7 安装cmake工具

pacman -S cmake

1.8 或者一键安装依赖环境

MSYS2 MINGW64使用下面命令安装

pacman -S base-devel mingw-w64-x86_64-toolchain

pacman -S cmake

MSYS2 MINGW64卸载命令,参数

-R: 删除

-Rs: 删除及其依赖

-Rsc : 删除所有

pacman -Rs base-devel mingw-w64-x86_64-toolchain

pacman -R cmake

MSYS2 MINGW32使用下面命令安装

pacman -S base-devel mingw-w64-i686-toolchain

pacman -S cmake

MSYS2 MINGW32卸载命令

pacman -Rs base-devel mingw-w64-i686-toolchain

pacman -R cmake

1.9 配置环境变量

替换为自己的安装路径

C:\msys64\mingw64\bin

配置环境变量

添加环境变量

1.10 验证环境变量配置

<code>gcc --version

g++ --version

mingw32-make --version

在这里插入图片描述

2.创建工程项目

2.1 创建一个main.c代码文件

新建一个文本文档,然后重命名为mian.c

新建一个文本文档

重命名

重命名为main.c

点击是

创建一个main.c代码文件

2.2 通过Code打开。

鼠标右键,通过Code打开。

在这里插入图片描述

打开项目工程

项目状态

可以看到,目前C工程项目下,还没有.vscode隐藏目录。隐藏目录下面也没有c_cpp_properties.json、launch.json、 tasks.json和settings.json配置文件

3.安装插件

3.1 点击扩展Extensions图标

点击扩展图标

3.2 输入搜索<code>C/C++ Extension Pack

安装C/C++ Extension Pack即可。

输入搜索`C/C++ Extension Pack

4. 配置文件

4.1 c_cpp_properties.json

这个文件是VSCode C/C++扩展(由Microsoft提供)特有的配置文件,用于配置C/C++项目的编译器、标准库路径、编译器选项等。这些设置帮助VSCode提供准确的代码完成功能、语法高亮、错误检查等。

路径包含:指定编译器用于查找头文件的目录。编译器路径:指定项目使用的编译器。C/C++标准:指定使用的C或C++语言标准。IntelliSense模式:设置适配的IntelliSense行为,以匹配选择的编译器和平台。

自动生成c_cpp_properties.json配置文件。键盘快捷键<code>Ctrl+Shift+P,选择C/C++: Edit Configurations (UI)

 自动生成c_cpp_properties.json配置文件

默认的配置文件

自动生成c_cpp_properties.json配置文件

自动生成默认的配置文件内容

自动生成默认的配置文件内容

修改<code>C/C++ Configurations内容会自动同步到c_cpp_properties.json

修改C/C++ Configurations内容如下

选择编译器的路径

修改C/C++ Configurations内容

IntelliSense" 是一个强大的代码完成助手,它提供了自动完成、代码导航、语法提示、参数信息、快速信息等功能。选择<code>gcc-x64 (legeacy)

修改C/C++ Configurations内容

C语言和C++语言标准版本选择C11和C++11

修改C/C++ Configurations内容

<code>c_cpp_properties.json内容自动同步如下

修改C/C++ Configurations内容

<code>{

"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 按钮

自动生成launch.json配置文件

点击<code>create a launch.json file按钮

点击create a launch.json file按钮

选择<code>C++ (GDB/LLDB)

选择C++ (GDB/LLDB)

生成默认的<code>launch.json文件

生成默认的launch.json文件

修改内容如下

修改内容如下

<code>{

"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>

int main(int argc, char *argv[]) {

struct timeval tv; // timeval结构用于存储秒和微秒

struct tm* 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");

return 0;

}

自动生成settings.json配置文件。切换到Run and Debug按钮,点击绿色小箭头或者按键F5调试。

按键F5调试

点击<code>configure Task按钮

点击configure Task按钮

选择第二个<code>C/C++: gcc.exe build active file,对应MSYS2编译器的路径

选择第二个C/C++: gcc.exe build active file,对应MSYS2编译器的路径

默认生成的配置文件内容

默认生成的配置文件内容

<code>{

"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文件内容

在这里插入图片描述

<code>tasks.json文件内容

在这里插入图片描述

修改后的<code>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

打开Settings

切换到<code>Workspace

切换到Workspace

选择<code>Auto Save自动保存功能,改为afterDelay自动保存代码修改。

在这里插入图片描述

同时<code>settings.json文件自动生成,会自动覆盖掉用户设置的功能。

同时settings.json文件自动生成,会自动覆盖掉用户设置的功能。

<code>settings.json配置文件内容文件

settings.json配置文件内容文件

5. Debug

5.1 调试代码

切换回main.c代码文件,点击F9在需要停止运行的行打上断点,点击F5开始调试代码。

在这里插入图片描述

代码运行到断点出停止,左边可以看到局部变量和寄存器的值。

5.2 代码调试快捷键

F5 - 继续/开始调试

作用:开始调试会话,或者从中断点(断点)处继续执行程序。用途:当你设置了断点并希望程序运行到这些断点时停下,可以使用 <code>F5 来继续执行直到下一个断点。如果程序尚未运行,F5 将启动调试会话。

F10 - 逐行执行(不进入函数内部)

作用:执行下一行代码,但不进入任何函数内部(即如果下一行代码是一个函数调用,它会执行该函数但不跳到函数里面去)。用途:用于当你想看程序的执行流程但不想深入每个函数的细节时。它允许你快速跳过函数调用,只关注当前执行流的高层次变化。

F11 - 逐行执行(进入函数内部)

作用:执行下一行代码,如果这行代码是一个函数调用,将进入该函数内部。用途:当你需要详细查看函数内部的执行过程和逻辑时使用。它允许你深入每个函数调用,理解函数的具体行为和局部变量状态。

Shift+F11 - 跳出当前函数

作用:从当前正在执行的函数中跳出,返回到函数被调用的位置。用途:当你在函数内部但想跳出这个函数,继续在调用后的执行点执行时使用。这在你已经了解函数内部行为,或当你误入一个函数且不希望继续在其中时非常有用。

调试信息

调试信息

6. Run

不调试,直接运行代码。选择代码文件,点击右上角的小三角按钮旁边的下拉栏,选择<code>Run C/C++ File。

选择代码文件,点击右上角的小三角按钮旁边的下拉栏,选择Run C/C++ File。

选择第一个<code>Launch preLaunchTask: Build,和launch.json配置文件里面的对应

在这里插入图片描述

运行后,程序不会在断点处停止。

运行后,程序不会在断点处停止。

可以看到调试后生成的可执行文件

在这里插入图片描述

7. 可能遇到的问题

<code>launch.json配置文件preLaunchTask参数留空或者参数名称和tasks.json配置文件的label参数名称不一致。

preLaunchTask参数留空或者名称不一致



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。