工欲善其事,必先利其器。
关于visual studio的断点调试,一直没弄清楚那3个选项:逐过程,逐语句,跳出这3个都分别是什么含义!每次都是凭感觉来回试。。。现在终于研究明白了!
调试的核心三剑客
这三个功能是调试的核心三剑客,就像看电影时的“快进”、“慢放”和“跳过”。
一定要记住它们的快捷键(F10, F11, Shift+F11),使用的时候效率会提高十倍!
举个例子来说
我们假设有这样一段代码,此时断点停在 Calculate() 这一行:
1 | void MyFunction() { |
1. 逐语句 (Step Into)
- 快捷键:F11
- 含义:遇到函数,这就进去。
- 动作:如果当前行包含一个函数调用(比如上面的
Calculate),调试器会进入该函数的内部,停在函数的第一行。如果不包含函数,就只走下一行。 - 使用场景:
- 一般当你怀疑
Calculate函数内部有 Bug。 - 你想看清楚这个函数具体是怎么一步步运算的。
- 注意:如果你不小心对
printf这种系统函数用了 F11,可能会跳进系统库的源码里(看不懂且没必要),这时候就需要用下面的“跳出”了。
- 一般当你怀疑
2. 逐过程 (Step Over)
- 快捷键:F10
- 含义:遇到函数,直接跨过去(但会执行它)。
- 动作:把整个函数调用当作一步。VS 会瞬间把
Calculate函数跑完,然后黄色箭头停在下一行printf上。 - 使用场景:
- 一般当你确信
Calculate函数是没问题的(比如是系统自带的)。 - 你只关心
Calculate算出来的返回值对不对,不想看它里面怎么算的。 - 用来快速浏览主流程逻辑。
- 一般当你确信
3. 跳出 (Step Out)
- 快捷键:Shift + F11
- 含义:在这个函数里呆腻了,赶紧跑完回去。
- 动作:瞬间执行完当前函数剩余的所有代码,然后返回到调用这个函数的地方(也就是父函数)。
- 使用场景:
- 如果你不小心按 F11 进到了一个枯燥的函数(比如构造函数,或者标准库函数),想赶紧出来。
- 或者你已经看出了当前函数的逻辑没问题,不想再一行行按了,想直接回到上一层继续调试。
总结对比
| 名称 | 快捷键 | 动作逻辑 |
|---|---|---|
| 逐语句 (Into) | F11 | 最细颗粒度。遇函数就进,查个底朝天。 |
| 逐过程 (Over) | F10 | 主流程优先。遇函数不进,直接拿结果。 |
| 跳出 (Out) | Shift+F11 | 立即结束当前层。跑完当前函数,回到上一层。 |
还从网上学了一个超好用的神技:运行到光标处 (Run to Cursor)
- 快捷键:Ctrl + F10 (或者鼠标右键 -> 运行到光标处)
- 场景:
你现在在第 10 行,你想看第 50 行的状态。- 如果一直按 F10,手都按酸了。
- 你可以直接把鼠标点在第 50 行,按 Ctrl + F10。
- 程序会自动全速运行,直到撞上第 50 行才停下(相当于临时加了个断点并运行)。
- 而且它完全支持跨方法、跨类、跨文件。只要程序的执行流在逻辑上能走到那一行,它就能在那停下来。
- 另外:如果是鼠标流,Visual Studio 新版本引入了一个更直观的功能:当你把鼠标悬停在代码行号左侧时,会出现一个小小的绿色三角形图标(有时候叫 “Run to here” 图标)。点击这个绿色小箭头,效果和 Ctrl + F10 是一模一样的。这对于不喜欢记快捷键的人来说也很方便。