着手使用 Visual Studio 2017(二):调试基础

2018年6月5日 1 条评论 350 次阅读 5 人点赞

调试是编程中的重要工作。调试自己的代码,我们可以快速跟踪 Bug;而调试别人的代码,我们能可以搞清楚别人程序的运行方式,进而研究算法等等。本文图文并茂地介绍 VS 中调试功能的基本用法,包括设置断点、步进调试、查看变量等操作,作入门之用。

开始运行调试

点击上方【本地 Windows 调试器】或按下F5快捷键即可。

 

设置普通断点

断点调试是最基本的调试方法。如果你在代码的某一行设置了断点,那么调试时程序运行到这一行时会暂停并等待调试者的指令。要在 VS 中设置断点,在该行代码上点击右键,选择【断点】-【插入断点】即可。

设置断点后,行号前面会出现一个红点。直接点击该红点也可以快速添加或删除断点。

 

注意,程序暂停在断点处的意思是,上一行已执行,这一行尚未执行行号前的黄色箭头代表这是将要执行的下一条语句。效果如下

这个黄色箭头可以拖动,但是打乱程序本身的执行顺序可能会导致意想不到的情况。

如果程序中设置了不止一处断点(或者断点位置在循环中,可能被多次执行),那么点击【继续】按钮即可直接跳转至下一断点处,中间过程不再暂停。

 

设置条件断点

条件断点的意思是,执行到断点行先判断是否满足条件,如果条件为真则暂停,否则忽略。条件断点是在 IDE 中设置的,无需修改源代码。
右键断点,选择【条件】,然后可以按自己的意图添加条件断点。比如我想让下面的循环到 i≥8 的时候暂停,那么就可以如下设置:

 

步进调试

步进调试按钮默认在 VS 窗口中上方位置,共四个,分别是“逐语句”“逐过程”“跳出”,当然还有“继续”。我们用这段示例代码来讲解,在第 6 行设置了一个普通断点:

#include <iostream>
void print(int x);
int main()
{
    int i = 1;
    while (i < 100) {
        print(i);
        i *= 2;
    }
    std::cout << "Bye" << std::endl;
    return 0;
}
void print(int x) {
    std::cout << x << std::endl;
}

 

逐语句

 执行下一条语句(即黄色箭头所指的语句)。若该语句涉及函数调用,那么进入函数体内。如果遇到嵌套的函数调用,那么通过“逐语句”将逐步进入最内层的函数中。执行顺序如下(行号):

…→6→7→13→14→15→8→9→6→7→循环…

逐过程

 同样执行下一条语句,不过如果涉及函数调用,不会进入函数内,而是将函数当作一条语句一步执行完毕。执行顺序如下(行号):

…→6→7→8→9→6→7→8→9→6→循环…

跳出

 跳出当前函数,就是直接执行完当前函数的剩余语句,返回主调函数的下一条语句。比如上述代码一开始进行“逐语句”调试,当运行到第 13 行时点击跳出,那么将返回到第 8 行。

继续

 就是一直往下执行,直到遇到下一个断点。注意:这里说的“下一个断点”也可能是经过循环再次遇到刚才那个断点。如果一直使用“继续”,那么程序每次 while 循环到第 6 行时都会暂停。

…→6→6→6→…

 在上面讲的那些按钮附近还有一个“显示下一语句”按钮,它的作用是讲光标定位到即将执行的语句(黄色箭头)。

 

查看局部变量

开始调试后,左下方出现“局部变量”窗口,这里显示当前块内所有局部变量的值。执行语句导致某些变量改变时,这些变量的值会变为红色

你还可以在此窗口修改变量的值,但这可能会出现意料之外的结果。如果我在上面直接把 i 的值修改为 100,那么继续运行时将直接跳出循环,在更复杂的程序中,可能会导致部分代码未执行,也可能导致指针错误等。因此要谨慎使用。

写在后面

本文讲解的都是 VS 调试中最最最基本的操作,也是初学者必须要学会的操作。VS 作为“宇宙第一 IDE”,其调试功能是非常强大的,如果你有疑问,自己动手尝试是最好的解决方法。

 

Jed

一名狂热的技术爱好者。

文章评论(1)

  • J2

    支持

    2018年6月14日
  • 提示:有人回复时会邮件通知您