2022年11月vscode调试CPP代码

本文介绍了一个简单的C++程序,实现两个整数的交换,并详细展示了如何使用VSCode进行项目的搭建、编译及调试过程。文章还提供了完整的代码示例与配置文件。

发现有些图片失效了,

看原笔记吧

有道云笔记

一、准备

环境默认都装好了哈。

创建cpp_debug项目

使用vscode 打开

插件版本如下

创建目录和文件

内容如下

swap.h

void swap(int &a, int &b);

main.cpp

#include <iostream> #include "swap.h" //这里不能是 <swap.h> using namespace std; int main(int argc, char const *argv[]) { int val1 = 10; int val2 = 20; cout << "before swap" << endl; cout << "val1 = " << val1 << endl; cout << "val2 = " << val2 << endl; swap(val1, val2); cout << "after swap" << endl; cout << "val1 = " << val1 << endl; cout << "val2 = " << val2 << endl; return 0; }

swap.cpp

#include "swap.h" void swap(int &a, int &b) { int temp; temp = a; a = b; b = temp; }

CMakeLists.txt

#规定cmake的最低版本要求 cmake_minimum_required (VERSION 3.10) #设置c++编译器 set(CMAKE_CXX_COMPILER "g++") #项目的名称,可以和文件夹名称不同 project(MYSWAP) #添加头文件的搜索路径 include_directories(${PROJECT_SOURCE_DIR}/header) #将源文件列表写在变量SrcFiles中 aux_source_directory(./src SrcFiles) #设置可执行文件输出路径 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) #设置可执行文件的名称,make之后bin目录下出现my_swap.exe add_executable(my_swap ${SrcFiles})

二、编译、运行

1、手动编译

cd build

cmake -G "MinGW Makefiles" .. (这个是windows执行,linux执行 cmake ..就行)

mingw32-make.exe (这个是windows执行,Linux执行 make就行)

cd ..\bin

my_swap.exe

大致步骤如下图

2、自动编译

  • 按住Ctrl+Shift+P,输入CMake: Configure,配置CMake。

点击完上面的图,会自动执行一些 命令,如下图

这里就OK了,你可以点击下面的build和三角,输出也如下图终端里面的内容

三、调试

在.vscode目录下面创建 launch.json

内容如下

{ "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示,一般不用修改 "type": "cppdbg", // 配置类型,这里只能为cppdbg "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加) // 将要调试的可执行程序的路径 "program": "${workspaceFolder}\\bin\\my_cmake_swap.exe", // 程序调试时传递给程序的命令行参数,一般设为空即可 "args": [], // 默认为false,设为true时,就算没有设置断点,调试时程序也将暂停在程序入口处 "stopAtEntry": false, // 要调试的可执行程序的工作路径 "cwd": "${workspaceFolder}\\bin", "environment": [], "externalConsole": false, // 调试时是否显示控制台窗口,设置为true显示控制台 "MIMode": "gdb", "miDebuggerPath": "W:\\env\\mingw64\\bin\\gdb.exe", // 调试器mingw64的安装路径 !!! 只修改这个路径就行。!!! "preLaunchTask": "Build", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }

在.vscode目录下面创建tasks.json

其实就是把手动的步骤写进去,打上label.

{ "version": "2.0.0", "options": { "cwd": "${workspaceFolder}\\build" }, "tasks":[ { "type": "shell", "label": "cmake", "command": "cmake", "args": [ "-G", "MinGW Makefiles", ".." ] }, { "label": "make", "group": { "kind": "build", "isDefault": true }, "command": "mingw32-make.exe", "args": [] }, { "label": "Build", "dependsOn":[ "cmake", "make" ] } ] }

打上断点,然后按F5就能调试了

<think>嗯,用户问的是VSCode调试时程序退出代码1的问题,这确实是个常见又头疼的故障。从用户引用的资料来看,ta应该已经尝试过一些基础排查,但可能还没找到具体原因。 用户提供的引用材料很有价值。引用4提到一个关键点:退出代码1可能是程序本身错误而非配置问题,建议用helloworld测试区分。引用2则指出环境选择错误会导致诡异现象,比如错用gcc编译c++程序。引用3和5补充了两种可能性:缺少暂停语句导致的闪退,以及cmake项目需要特殊配置。 用户可能是个刚接触VSCodeC++开发者,因为退出代码1这种基础错误通常困扰新手。ta的提问方式很专业,引用了多篇资料,说明已经做过功课但卡在某个细节上。情绪上可能有些焦虑——毕竟调试失败会打断工作流。 需要帮ta系统化排查。首先应该区分是程序错误还是环境错误,用helloworld测试最稳妥。如果环境没问题,就要看编译日志了,g++的错误信息往往藏在tasks.json触发的编译过程中。特别注意那些“看起来能运行但突然崩溃”的情况,引用2提到的std::string问题就是典型例子。 对于cmake项目用户,要单独说明调试配置方法,因为引用5提到vscode是通过gdb调试cmake项目的。另外控制台闪退问题虽然简单但容易被忽略,引用3的方案虽然原始但有效,不过更优雅的做法是修改launch.json的console参数。 最后留的扩展问题要覆盖用户可能遇到的进阶场景:配置验证、多文件项目、第三方库依赖这些坑点都值得展开。</think>在 VSCode 调试时遇到程序退出并返回 **错误代码 1**,通常表示程序在运行时遇到了错误并异常终止。以下是常见原因及解决方法,结合你的引用内容整理如下: --- ### **常见原因及解决方法** #### 1. **程序逻辑错误** - **原因**:代码中存在未处理的异常、内存错误、逻辑缺陷等导致崩溃。 - **验证方法**:运行一个简单的 `Hello World` 程序测试[^4]。 - **解决**: - 检查代码逻辑(如空指针、数组越界)。 - 在终端手动编译运行:`g++ -g main.cpp -o main && ./main`,观察错误信息。 - 使用 `try-catch` 捕获异常(C++)。 #### 2. **编译器环境配置错误** - **原因**:错误选择编译器(如用 `gcc` 编译 C++ 代码)[^2]。 - **现象**:涉及 `std::string` 等 C++ 特性时报错退出。 - **解决**: 1. 确认 `tasks.json` 中编译器为 `g++`(非 `gcc`): ```json "tasks.json": { "command": "g++", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"] } ``` 2. 卸载错误工具链,重新安装 `g++`: `sudo apt install g++` #### 3. **控制台闪退** - **原因**:程序执行完毕后控制台自动关闭,来不及查看输出。 - **解决**: - **方法1**:在 `main` 函数末尾添加暂停语句: ```cpp #include <cstdlib> // 需包含头文件 int main() { // ...你的代码... system("pause"); // Windows // 或 system("read -p 'Press Enter...'"); // Linux/macOS } ``` - **方法2**:修改 `launch.json`,添加外部控制台[^3]: ```json "launch.json": { "configurations": [{ "console": "externalTerminal", // 使用独立终端 }] } ``` #### 4. **CMake 项目配置问题** - **原因**:CMake 项目未正确链接库或生成调试信息。 - **解决**: - 确保 `CMakeLists.txt` 包含调试选项: ```cmake set(CMAKE_BUILD_TYPE Debug) # 启用调试符号 ``` - 在 VSCode 中重新配置 CMake 工具链(点击底部状态栏 `CMake` 选择配置)。 #### 5. **调试器(GDB)配置错误** - **原因**:`launch.json` 中调试器路径或参数错误。 - **解决**: 1. 检查 `launch.json` 的 `miDebuggerPath` 是否指向有效 GDB: ```json "launch.json": { "configurations": [{ "miDebuggerPath": "/usr/bin/gdb", // Linux 路径示例 }] } ``` 2. 安装 GDB:`sudo apt install gdb`(Linux)。 --- ### **排查流程** 1. **运行 Hello World**:验证基础环境是否正常[^4]。 2. **检查终端输出**:在 VSCode 终端手动编译运行,查看具体错误。 3. **审查 JSON 配置**: - `tasks.json`:编译命令是否正确(`g++` 而非 `gcc`)[^2]。 - `launch.json`:调试器路径、外部终端设置是否合理[^3][^5]。 4. **添加调试断点**:在代码起始位置设置断点,观察是否执行到预期位置。 --- ### **扩展问题** 1. **如何验证 VSCodeC++ 调试配置是否正确?** > 运行简单程序(如 `Hello World`),检查是否能正常断点调试[^4][^5]。 2. **多文件 C++ 项目在 VSCode调试失败怎么办?** > 确保 `tasks.json` 编译所有文件: > ```json > "args": ["-g", "*.cpp", "-o", "main"] > ``` 3. **第三方库链接失败导致退出代码 1 如何解决?** > 在 `tasks.json` 中添加库路径和链接参数: > ```json > "args": ["-g", "${file}", "-o", "main", "-I/path/to/include", "-L/path/to/lib", "-lxxx"] > ``` --- > **提示**:多数退出代码 1 问题源于代码逻辑或环境配置。优先通过终端手动编译运行定位错误,再同步调整 VSCode 配置[^2][^4]。遇到复杂项目时,确保 CMake 或 Makefile 正确生成调试目标[^5]。 [^1]: 环境配置参考 [^2]: 编译器选择错误导致 std 支持问题 [^3]: 控制台闪退解决方案 [^4]: 程序逻辑与配置区分 [^5]: CMake 项目调试配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值