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

VS实用调试技巧(自用上课笔记)

1.bug是什么?

在编程和软件开发中,Bug(程序缺陷 / 错误)是指代码中存在的问题,这些问题会让程序的运行结果偏离预期,甚至引发严重故障。

2.调试是什么

调试(Debug)是指在程序运行过程中,定位、分析并修复 Bug 的系统性过程,是程序员核心技能之一。

3.Debug 和 Release

Debug(调试模式)

  • 定位:专为开发调试设计的配置,也是 VS 的默认配置。
  • 核心特点
    • 编译器不做任何优化,保留完整的调试信息(变量名、函数名、代码行号等)。
    • 会插入额外的调试代码,支持断点、单步执行、变量监视等所有调试功能。
    • 生成的程序文件体积大、运行速度慢,仅用于开发阶段的调试和测试。

Release(发布模式)

  • 定位:专为软件发布设计的配置,用于生成最终给用户使用的程序。
  • 核心特点
    • 编译器会执行深度优化(如代码精简、指令重排、变量优化),移除所有调试信息。
    • 生成的程序文件体积小、运行速度快,但无法正常调试(断点会失效,变量也无法被监视)。
    • 用于程序完成调试、准备发布给用户的阶段。

测试人员站在用户的角度来测试 所以使用release版本

程序员调试用的是debug版本

他们编译产生的可执行程序的文件大小debug版本的大小比relaese大

4.VS调试快捷键

一、基础快捷键

表格

快捷键核心功能
F9切换断点(设置 / 取消),精准定位程序暂停位置
F5启动调试 / 继续执行,直接跳到下一个断点
F10逐过程执行:执行一行 / 一次函数调用,不进入函数内部
F11逐语句执行:进入函数内部,一步步查看执行细节
Ctrl+F5不调试直接运行:快速运行程序验证功能

二、关键概念

  1. 断点:在指定位置暂停程序,配合 F5/F10/F11 观察执行逻辑。
  2. 条件断点:满足设定条件(如变量值)时才触发暂停,精准定位复杂场景问题。

三、核心逻辑

  • 调试流程:F9 设断点 → F5 启动 → F10/F11 逐行追踪 → 查看变量 / 逻辑
  • 快速运行:无需调试直接运行程序时用Ctrl+F5,提升效率。

5.监视和内存观察

5.1监视

监视窗口是调试时实时追踪变量 / 表达式值的核心工具,配合调试流程使用,能快速定位逻辑问题。

打开步骤

  1. 启动调试:按F5进入调试模式(仅调试状态下可打开监视窗口)。
  2. 点击顶部菜单栏【调试】→ 选择【窗口】→ 点击【监视】
  3. 任选一个监视窗口(监视 1/2/3/4,功能完全一致,可多开同时追踪不同变量)。

5.2 内存窗口

内存窗口是调试时深度查看变量内存布局、原始数据的核心工具,适合理解指针、数组、数据类型底层存储。

打开步骤

  1. 启动调试:按F5进入调试模式(仅调试状态下可打开内存窗口)。
  2. 点击顶部菜单栏【调试】→ 选择【窗口】→ 点击【内存】
  3. 任选一个内存窗口(内存 1/2/3/4,功能完全相同,可多开对比查看)。

调试举例(在debug x86环境下)

这个的结果是什么呢?

你是不是以为这个输出结果是13个hehe

结果是死循环

为什么呢?

在debug x86环境下 数组的存放是由低到高变化

所以i一加到12就变成0所以会导致死循环

6.编程常见错误归类

6.1编译型错误

核心特点

属于语法错误,代码不符合 C 语言语法规则,编译器直接报错,无法生成可执行文件。

典型例子

  • E0065/C2143:缺少分号(;)、括号不匹配、关键字拼写错误等。

排查方法

  1. 双击错误信息,VS 会自动跳转到错误代码行(或附近)。
  2. 重点检查标点符号、关键字拼写、语法格式,这类错误会随着你对语言的熟练掌握越来越少。

6.2 链接型错误

核心特点

代码语法没问题,但编译器找不到你调用的函数 / 变量定义,导致链接阶段失败,无法生成程序。

典型例子

  • LNK2019/LNK1120:无法解析的外部符号(比如printf未定义)。

常见原因

  • 函数 / 变量名拼写错误(比如把printf写成Printf)。
  • 忘记包含对应头文件(比如用printf没加#include <stdio.h>)。
  • 引用的库文件不存在或路径错误。

排查方法

根据错误信息里的 “标识符”(比如printf),检查拼写、头文件和库引用。


6.3 运行时错误

核心特点

语法和链接都没问题,程序能正常启动,但运行过程中崩溃、结果异常或卡死,比如数组越界、野指针、除零错误。

排查方法

这类错误千变万化,必须靠调试解决

  1. 用 VS 的断点(F9)+ 单步执行(F10/F11),定位到出错的代码行。
  2. 配合监视窗口和内存窗口,查看变量值和内存状态,找到问题根源。

💡 快速记忆口诀

  1. 编译错:看语法,查标点
  2. 链接错:找定义,查拼写 / 头文件
  3. 运行错:靠调试,一步步定位
http://www.jsqmd.com/news/688418/

相关文章:

  • undo log 的内容管理
  • 活动策划公司实操指南:大型会议活如何实现高效签到 - 麦麦唛
  • 淮安创帆制冷设备:苏州冷库板价格 - LYL仔仔
  • 求职精灵3.0版本使用教程
  • 2026熙琦科技迷你打印机批发靠谱正规拿货渠道干货分享 - 热敏感科技蜂
  • 从Fast RCNN到YOLOX:看目标检测‘头’部结构的十年‘减肥’与‘增肌’史
  • ESP32 LVGL 8.1样式背景避坑指南:bg_grad_stop设置不对,你的渐变为啥不显示?
  • 手把手教你用SuperMap iClient + Leaflet实现‘行政区域高亮’效果(从查询数据到渲染遮罩)
  • 武汉擎天仕劳务:湖北设备吊装公司 - LYL仔仔
  • OpenBoardView:免费的.brd文件查看终极方案,电子工程师必备工具
  • 没有采购经验可以考CPPM吗 - 众智商学院官方
  • Ultimate SD Upscale实战指南:AI图像高清放大的完整解决方案
  • 终极窗口调试指南:5个WinSpy++核心技巧彻底解决Windows开发难题
  • 从散热困境到自由掌控:TCC-G15如何让戴尔游戏本重获新生
  • 别再只用收盘价了!用Python实战Parkinson、Garman-Klass等3种高阶波动率算法(附完整代码避坑指南)
  • 告别命令行:在CentOS 7上通过直接编辑XML配置文件搞定firewalld端口转发
  • 2026年4月跨境物流货代企业选择指南:海运空运代理、欧美中东非东南亚专线及跨境中转物流公司推荐 - 海棠依旧大
  • 用ESP32的触摸引脚和RTC GPIO做个智能唤醒开关(附Arduino代码)
  • 如何在通达信中快速部署ChanlunX缠论可视化插件:完整免费教程
  • 5G NR网络优化实战:手把手教你配置CSI报告,提升下行速率(附RRC信令解析)
  • 抖音内容采集工作流优化:从手动复制到智能管理的转变
  • 南京乐意工程机械租赁:南京叉车出租服务 - LYL仔仔
  • OpenWRT Cron进阶玩法:除了定时重启,还能用定时任务实现这些智能场景
  • 告别模糊与噪声:手把手教你用Python+OpenCV提升数字全息显微图像质量(附代码)
  • 思科设备配置完重启就丢?一文搞懂Running-config与Startup-config的区别与保存
  • 在x86电脑上跑ARM系统:用QEMU/KVM搭建Debian ARM64虚拟机的保姆级教程
  • 数据结构与算法学习日志2
  • 别再重跑模拟了!手把手教你修复LAMMPS的dump轨迹,让它变成MDAnalysis能读的标准XYZ
  • 报表有哪几种模式?三种报表模式你知道吗?
  • 2026年4月丹阳钛架/镜架/镜框/眉毛架/品牌:聚焦轻奢品质与匠心工艺 - 2026年企业推荐榜