编译器中debug功能详解(c++,visua studio)

debug与run的区别

在程序中,初学者经常会使用run直接运行得到结果,通过编译器的结果来验证自己的程序。然而我们会听说许多高手经常会debug,那么什么是debug,debug与普通的run有什么区别呢?
事实上,我们在平时run程序的时候,程序是从头到尾依次执行,只有碰到问题或者执行完成时才会停止,而中间的许多过程我们是无法干预与知晓的。而debug就是让程序分步执行,从而让我们更好的了解程序执行的过程,以及更好的发现程序中的bug,一名合格的程序员必须要会debug,接下来就跟我一起学习吧!

step into

step into 就是单步执行的意思,即一行一行的执行(在vs中可点击Debug menu > Step Into或者按F11来执行),如:


#include <iostream>

void printValue(int value)
{
    std::cout << value << '\n';
}

int main()
{
    printValue(5);

    return 0;
}

当我们step into 后:
456
可以看到在图片的右侧有一个小黄色箭头,这就是编译器告诉你下一个将要执行的语句,即接下来就要执行第9行语句。当我们再次step into后,箭头就会指向第10行即接下来就要执行第10行,再次step into后 箭头会跑到第4行,即printValue函数部分:
在这里插入图片描述
再多试几次step into 后,你会发现箭头又指到了第10行,即printValue(5):,你可能会以为这是又要进入这个函数,但其实是编译器告诉你这个函数已经执行完毕返回了,将要进行下一步执行即12行。
再执行几次step into 后,到了程序最后,一些编译器就会自动结束debug过程,如果你的程序还没有自动结束,你可以在Debug menu > Stop debugging手动结束。注意,Stop debugging 在任何情况下都可以强制结束debug过程。

step over

和step into 一样,step over 也是逐条语句执行,只不过它和step into最大的区别就是在他调用函数时,它不再进入函数内部逐个执行,而是直接执行完函数返回结果后,将控制权交给你(在vs中可点击Debug menu > Step over或者按F10来执行)。这一般试用于你对自己写的函数有信心,确保它不会出现问题。如当我们step over 到第十行,即printValue(5)::
在这里插入图片描述
再次step over,会发现箭头直接转向了12行,在这里插入图片描述
step out跳过了printValue函数的调用过程,直接返回进行下一步。

step out

step out是在调试过程中使用,作用是执行完并跳出当前调用的函数,并返回结果,然后将控制权交给你。(在vs中,可通过 Debug menu > Step Out菜单找到step out或使用 Shift-F11组合键)
如下,当单步调试到函数内部时:
在这里插入图片描述
此时step out,你会发现箭头直接返回第10行,即执行完成了当前正在调用的函数并返回。
在这里插入图片描述

step back

可能有些编译器会有step back功能,即在你不小心跳过了某个语句时返回。然而建议大家在调试时如果不小心跳过了某个你需要的语句,最好还是结束调试,重新编译。

run to cursor

通过鼠标光标,很方便的在光标处停止,将控制权交给你。(相当于在光标处加了一个断点,下面会讲到)在vs中将光标放在你想中止的代码行,然后右键run to cursor或使用ctrl+F10组合键即可。
在这里插入图片描述

continue start

当你在某个语句处停止时,你可能想要继续运行,这时只要continue就可以了(vs中点击 Debug menu > Continue,或者通过F5快捷键)
事实上,start和continue时双胞胎的关系,只不过start是在最开始时的运行,你可以理解为代码停在了最开始。

Breakpoints

当你直接开始start的时候,你或许会发现代码直接执行完毕,你可能会疑惑这不和run没区别吗。事实上,只有你加入了断点(vs中可通过点击语句行最左侧或F9快捷键加入断点)start和continue功效才能发挥出来。断点就是你希望在调试代码时想要停止的地方,设置断点有利于我们高效的找出bug。如我在第10行和第5行加入了断点。
在这里插入图片描述
这时我按下F5或start开始debug:
在这里插入图片描述
会发现代码停在了第10行即第一个断点(逻辑顺序),再次F5(continue):
在这里插入图片描述
代码停在了第5行即第二个断点(逻辑顺序)
因此,设置断点会让你理清断点之前的程序的一些执行信息,便于你找出程序的问题。
好的,我的分享就到这了,菜鸡第一次写,请大佬多担待!!!

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值