626-VS2019代码运行后的调试

VS2019代码运行后的调试

当我们直接去运行代码的时候,是从main函数开始,依次的往下直接执行下去,直到执行完最后一句代码
在这里插入图片描述
在这里插入图片描述
但是有的时候,这个输出结果和我们预期的是不一样的,或者程序挂掉了,怎么办呢?

这时候我们就要调试,让代码停下来,一行一行的往后执行,执行当这一行的时候,停下来看看这一行所产生的变量的中间值和我们的预期是不是一样的。
我们可以让程序调试启动以后,在任意一行代码停下来。
我们只需要给相应的行数打上断点就可以了。
断点:让程序调试起来之后在这一句代码停住。

我们来看看怎么操作:
方法1:快捷操作:是我们把鼠标移到这行代码的左侧,用鼠标点,打上1个红点,我们可以在多个行打红点。
在这里插入图片描述
方法2:快捷键:F9
我们把鼠标移到要打断点的那一行末尾,然后按F9,就打断点了。
在这里插入图片描述
打完断点后
在这里插入图片描述
我们要开启调试,快捷键是:F5)在这里插入图片描述
在这里插入图片描述
我们看到启动调试后,红色的圆圈里有黄色的箭头,指向的这一行就是我们当前的代码调试起来停下来的这一行,这一行还未运行。

调试起来,我们怎么让代码一行一行的往下走呢?

我们看最上面的一行:
在这里插入图片描述
逐语句(F11)
在这里插入图片描述
逐过程(F10)
在这里插入图片描述
跳出(Shift+F11)
在这里插入图片描述
在这里插入图片描述
现在我们点击一下“逐过程”,或者F10
在这里插入图片描述
我们看到黄色箭头跳到下一行了,
下面显示的是常用的窗口,我们还有一个窗口,我们点击“菜单”的监视窗口在这里插入图片描述
我们还有一个窗口–内存的窗口
在这里插入图片描述
在这里插入图片描述
内存窗口:特别是指针和内存管理的问题。

监视窗口:一行一行的,我们可以在里面输入变量
在这里插入图片描述

a是10,因为箭头指向的代码还没有执行,所以b是随机值
我们再点击“逐过程”
在这里插入图片描述
我们还可以查看a,b的内存的地址
在这里插入图片描述
我们可以把变量的内存地址复制起来跑到内存窗口去:
在这里插入图片描述
把地址输到窗口里,然后敲回车
在这里插入图片描述
根据显示的十六进制计算出十进制的值
在这里插入图片描述
在这里插入图片描述
因为函数进行是一个压栈的过程,先压的a在栈底,地址高,后压的b在栈顶,地址低。
在这里插入图片描述
低地址放低字节,高地址放高字节,这个系统是小端的。

当我们调试到第36行的时候,如果我们想要进入到sum这个函数,怎么做?
在这里插入图片描述
我们点击“逐语句”,或者快捷键:F11
在这里插入图片描述
我们看到黄色箭头就跳到sum函数这里了,我们点击“逐过程”或者快捷键:F10,跳到下一句代码
在这里插入图片描述
再按F10
在这里插入图片描述
再按F10
在这里插入图片描述

如果我们在调试的时候,中间的代码不想调试了,想直接跳到下一个断点处,该怎么办?
在这里插入图片描述
点击“跳出”或者按快捷键:Shift+F11
在这里插入图片描述

调试的总结

在这里插入图片描述

调试的应用示例1

在这里插入图片描述
在这里插入图片描述
代码执行的结果和我们的预期不一样,我们开始调试!
我们打断点(F9),启动调试(F10)
在这里插入图片描述
然后继续按F10,执行到下一句代码
在这里插入图片描述
然后继续按F10,执行到下一句代码
在这里插入图片描述
我们可以在监视窗口看a,b现在的值
在这里插入图片描述
都没有问题。现在我们要进入sum函数,按F11
在这里插入图片描述
然后按F10,执行到下一句代码

在这里插入图片描述
我们把鼠标放在变量名上,也会显示出此时a,b的值是多少‘
在这里插入图片描述
在这里插入图片描述
result怎么是-10???我们往后一看,原来是把+号写成-号了

调试的应用示例2

在这里插入图片描述
在这里插入图片描述
程序挂掉了
怎么办?我们开始调试!
我们从main函数第一行打断点(F9),然后启动调试(F5)
在这里插入图片描述

按F10,执行到下一步
在这里插入图片描述
我们按F11,进入函数看看

在这里插入图片描述
然后按F10,执行到下一步
在这里插入图片描述
我们打开监视器窗口看看
在这里插入图片描述
因为这些变量不在这个函数上,我们按DELETE键删除掉,然后输入p,看看这个p指针的值
在这里插入图片描述
为什么p是空的?因为现在是让代码停下来,当前行代码还没有执行呢
我们按F10,执行到下一步
在这里插入图片描述
现在这个p指针有指向内存了
VS2019上,对栈上的内存的初始化是

在这里插入图片描述VS2019上,对堆上的内存的初始化是
在这里插入图片描述
然后我们按F10,执行到下一步
在这里插入图片描述
现在这个函数执行完了,但是我们现在看,这个监视器里的p的值怎么变为空了?在这里插入图片描述
怎么执行完,回到主函数上,p变为空了?
然后我们继续按F10,执行到下一步看看
在这里插入图片描述
把helloworld往空地址上拷贝
在这里插入图片描述
0地址是禁止访问的,更别说写了!!!程序就挂掉了
所以,我们知道,代码挂在第40行
在这里插入图片描述
我们改为正确代码:
在这里插入图片描述
成功了
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值