断点调试需在Debug模式下设置,F9快捷键添加/删除,F10逐过程、F11逐语句,异常调试需通过Ctrl+Alt+E启用C++异常捕获。

怎么在VS里让程序停在你想看的地方
断点是追踪执行过程最直接的手段。只要代码行左侧灰色边距出现红点,运行到那里就会暂停。F9 是最快设置方式,鼠标单击也行;如果误删了,再按一次 F9 就能恢复。
注意:断点只在 Debug 模式下生效。如果你当前是 Release 配置,哪怕加了断点,程序也会全速跑完——编译器优化会重排、内联甚至删掉整段逻辑,断点根本没机会触发。
- 不要在
main()入口前设断点(比如全局对象构造函数里),VS 有时无法准确挂住 - 模板函数或 inline 函数内部设断点,可能需要先确保该实例被实际生成(比如调用过一次)
- 多线程环境下,断点命中后其他线程仍在运行,需配合“线程”窗口手动冻结
F10 和 F11 到底该按哪个
F10(逐过程)跳过函数调用,F11(逐语句)钻进函数体。这不是风格偏好,而是调试意图决定的:
想确认某个 std::vector::push_back() 是否真把元素加进去了?按 F11 进去;想快速过掉日志打印这类辅助逻辑,直接 F10。
立即学习“C++免费学习笔记(深入)”;
- 循环体本身不是函数,所以
F10不会跳过整个 for,仍会逐次停在循环头 - 如果函数被内联(尤其 Release 下),
F11可能直接跳到下一行,此时得靠反汇编窗口看真实指令流 -
Shift+F11(跳出)适合你误进太深时快速返回上层调用点
看不到变量值?先检查这三处
调试时鼠标悬停看变量值失效,常见原因不是代码问题,而是调试信息缺失或作用域错位:
- 确保项目属性中
C/C++ → 常规 → 调试信息格式设为程序数据库(/Zi)(Debug 默认就是,但有人会误改成无) - 局部变量在离开作用域后立即失效,比如 if 块末尾设断点,块内定义的变量在“自动”窗口里会显示
<name> 未声明</name> - 优化开关
/O2或/Ox会让变量被寄存器暂存或完全消除,必须关掉(配置属性 → C/C++ → 优化 → 优化功能 → 禁用(/Od))
异常发生时怎么立刻定位到 throw 行
默认情况下,C++ 异常抛出后程序直接崩溃,你根本看不到哪行代码惹的祸。要让它停在 throw 那一刻:
按 Ctrl+Alt+E 打开异常设置,展开 C++ Exceptions,勾选 std::exception 和 所有 C++ 异常。这样只要执行到 throw std::runtime_error("xxx"),VS 就会中断并高亮那一行。
如果异常来自第三方库且没源码,调用堆栈窗口(Ctrl+Alt+C)里的倒数第二个帧通常是你的调用点,双击就能跳回自己的代码。
真正容易被忽略的是:这个设置只对当前调试会话有效,关闭 VS 后不会保存。建议把它加进团队共享的 .vssettings 文件里,避免每次重装都要重配。


















