当前位置: 首页 > news >正文

vscode调试c/c++

1. 调试配置选择

  • 调试 C 程序:选择 "Debug C Program"(调用 gcc 编译)。

  • 调试 C++ 程序:选择 "Debug C++ Program"(调用 g++ 编译)。


2. 调试步骤

  1. 打开代码文件:确保当前编辑器打开的是 .c 或 .cpp 文件。

  2. 设置断点:在代码行号左侧点击设置断点(红点)。

  3. 启动调试

    • 按 F5 或点击左侧调试图标 → 顶部下拉菜单选择调试配置(如 Debug C Program)→ 点击绿色箭头启动。

  4. 调试控制

    • 继续(F5):运行到下一个断点。

    • 单步跳过(F10):执行当前行,不进入函数。

    • 单步进入(F11):进入函数内部。

    • 查看变量:在调试侧边栏的 VARIABLES 区域查看当前变量值。


3. 关键验证点

检查编译是否成功
  • 调试前会自动执行 preLaunchTask(即 tasks.json 中的编译任务)。

  • 如果编译失败:

    • 检查终端输出错误(如语法错误)。

    • 确保 gcc/g++ 命令在终端可直接运行(验证环境变量配置)。

检查调试器路径
  • Windows:若使用 MinGW,需将 miDebuggerPath 改为绝对路径(如 "C:/TDM-GCC-64/bin/gdb.exe")。

  • Linux/macOS"gdb" 通常可用(确保已安装 gdb/lldb)。

检查输出文件路径
  • 你的配置将生成 .out 文件(如 main.c → main.out),需与 launch.json 的 program 字段一致。


4. 常见问题解决

调试时提示“无法找到 .out 文件”
  • 原因:编译失败或路径错误。

  • 解决:

    1. 手动运行编译命令(如 gcc -g main.c -o main.out)确认是否成功。

    2. 检查 ${fileDirname}/${fileBasenameNoExtension}.out 路径是否正确。

断点未生效
  • 确保编译时包含 -g 参数(生成调试信息)。

  • 重新启动调试会话(有时需清理旧的可执行文件)。

Windows 下终端无输出
  • 将 externalConsole 改为 true(部分 Windows 环境需要外部终端显示输出)。

launch.json

{"version": "0.2.0","configurations": [{"name": "Debug C Program","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.out","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,  // 改为 false 使用 VSCode 终端"MIMode": "gdb","miDebuggerPath": "gdb",  // Windows 改为 "C:/TDM-GCC-64/bin/gdb.exe""setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "gcc build active file"  // 编译 C 文件},{"name": "Debug C++ Program","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.out","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "gdb",  // Windows 改为 "C:/TDM-GCC-64/bin/gdb.exe""setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "g++ build active file"  // 编译 C++ 文件}]
}

tasks.json

{"version": "2.0.0","tasks": [{"label": "gcc build active file","type": "shell","command": "gcc","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.out"],"group": "build","problemMatcher": ["$gcc"],"detail": "编译当前 C 文件"},{"label": "g++ build active file","type": "shell","command": "g++","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.out"],"group": "build","problemMatcher": ["$gcc"],"detail": "编译当前 C++ 文件"},{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "C:\\TDM-GCC-64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}]
}

相关文章:

  • 在linux中,如何使用malloc()函数向操作系统申请堆内存,使用free()函数释放内存。
  • python打包exe报错:处理文件时错误:Excel xlsx file; not supported
  • Python常见问题
  • 深入理解 Dijkstra 算法:原理、实现与优化
  • openfeign与dubbo调用下载excel实践
  • 如何获得sqoop-1.4.6.2.3.99.0-195.jar
  • 保持视频二维码不变,更新视频的内容
  • GMT之Bash语言使用
  • 濒危仙草的重生叙事:九仙尊米斛花节如何以雅集重构中医药文化IP
  • Qt原型模式实现与应用
  • (4)python开发经验
  • BRPickerView
  • ansible进阶02
  • 鸿蒙OSUniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp
  • 【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件
  • C++引用编程练习
  • 文件名是 ‪E:\20250512_191204.mp4, EV软件录屏,未保存直接关机损坏, 如何修复?
  • 数据统计分析及可视化
  • 最佳实践PPT | 数据架构设计总体规划方案数据中台架构数据架构图解决方案
  • 如何用Jsoup库提取商品名称和价格?
  • 透视社会组织创新实践中的花开岭现象:与乡村发展的融合共进
  • 晋级四强!WTA1000罗马站:郑钦文2比0萨巴伦卡
  • 七部门:进一步增强资本市场对于科技创新企业的支持力度
  • 男子不满和睦家医院手术效果还遇到了“冒牌医生”?院方回应
  • 汤加附近海域发生6.4级地震
  • 第四届长三角国际应急博览会开幕,超3000件前沿装备技术亮相