在vs2019的环境下认识C++(6)

本文介绍了如何在Visual Studio 2019中进行C++程序的DEBUG操作,包括设置断点、监视变量、查看内存及理解调试过程中的变量变化。通过实例展示了逐语句和逐过程的区别,并探讨了DEBUG模式下编译器的优化行为。

如何用visual studio 2019来进行DUBUG
首先我们新建math.cpp文件,写入

#include<iostream>
#include"Log.h"

int main()
{
	int a = 8;
	a++;
	const char* string = "hello";
	for (int i = 0; i < 5; ++i)
	{
		const char c = string[i];
		std::cout << c << std::endl;
	}

	Log("Hello World!");
}

新建Log.cpp文件,写入

#include<iostream>
#include"Log.h"

void Log(const char* message)
{
	std::cout << message << std::endl;
}

新建Log.h文件,写入

void Log(const char* message);

运行程序就可以得到打印的结果
在这里插入图片描述
如图所示插入断点,表明我们要运行到该断点运行之前的位置
在这里插入图片描述
按下F5开始调试,即进入调试页面,我们可以在下方去查看变量的情况
在这里插入图片描述
右键选择a进行监视,我们就可以进入监视页面
在这里插入图片描述我们还可以加入更多的监视,比如
在这里插入图片描述
现在我们要继续运行该程序,VS为我们提供了几种方法
在这里插入图片描述
其中比较重要的有
逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面。
逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。
跳出,是当你进入到函数内,跳出可以让你在执行函数内剩余的语句时,直接返回到该函数被调用时的后面的语句处。
“逐语句”和“逐过程”的差异仅在于它们处理函数调用的方式不同
如果要查看函数调用的内容,则使用“逐语句”。
若要避免单步执行函数,则使用“逐过程”。
现在我们按F10执行逐语句,
在这里插入图片描述可以看到a的值由一个很奇怪的值变成了我们所给的8。这个很奇怪的值其实来自DEBUG这个过程,之前提到过DEBUG模式下编译器会进行一定的优化,我们一开始并未给a初值,因此编译器就会给它一个机器值方便我们DEBUG。
在这里插入图片描述
如图所示查看内存,我们可以看到这些数值是如何在内存中存放的
在这里插入图片描述在这里插入图片描述
就像指针一样我们手动查找a的值,在地址中输入&a回车就可以看到我们在内存中储存了8这个值。如果我们想的再多一点:一个int类型的整数占四个字节,正好就是第一行的08 00 00 00,另外,在计算机中数据以大端存储,所以00 00 00 08存进内存就变成了 08 00 00 00。这部分涉及到汇编和计算机组成原理的知识。
再次按下F10,可以看到a的值发生了改变,变成了9
再按一次F10,我们又对string进行了赋值,由于string是一个指针,所以我们直接在地址中输入string即可
(这里可以思考string和&string有什么区别)
在这里插入图片描述 在这里插入图片描述
可以看到我们已经在内存中存入了hello这个单词。
在DEBUG过程中我们可以再次添加断点,再点击继续,就可以直接转到下一断点处
在这里插入图片描述
再看看命令行,也已经正确输出了Log函数之前的内容
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值