How to DEBUG C++ in Visual Studio

How to DEBUG C++ in Visual Studio

如何在Visual Studio中调试C++


介绍

调试是编程的重要组成部分,不仅是编程而且是学习,因为如果你知道如何调试你的代码你实际上会理解程序的工作原理以及计算机实际上如何运行您的代码。我用Visual Studio来演示调式,不过基本上所有的IDE都有调试功能
调试的内容是找到断点和查看内存。断点和读取内存是调试的两个主要部分,当然你会一起使用他们,所以换句话说你会按顺序设置断点读取内存。调试的重点是什么?进行正确的调试消除错误。为了从我们的代码中找到错误我们必须诊断我们的程序,这部分实际上可能非常棘手,如果你对这门语言有很好的经验。你必须记住计算机总是正确的。我所说的“总是”是指 99% 的时间是。不太可能的是,你做了一些正确的事情然后计算机没有按预期工作通常是你犯了一个错误并且开始意识到这对程序员来说非常重要。你很快就会知道计算机几乎总是正确的,所以这真的是关于弄清楚你的错误,我做错了什么?所以让我去断点并读取内存。

断点

我们的断点是什么,断点是我们程序中调试器将中断的点,这里得break 一词仅表示暂停,我们可以在我们程序中得任何代码行上设置断点,当执行到那一行时,它将暂停。它将挂起该执行线程,我们可以查看程序得状态。这个程序的状态真正指的是内存。我们可以暂停程序,看看它的内存发生了什么。记住正在运行的程序的内存几乎就是它所拥有的,它时每个变量设置的内容,每个函数都会被调用。当你暂停,内存就是真的。所以浏览内存对于诊断你的程序有什么问题非常有用,因为通过查看内存你可以看到每个的内容,就像这个变量不应该是这个值,显示时错误的。你也可以逐步执行你的程序,这样就可以在第五行放置一个端点,然后只需要点击一个按钮,但后程序就会一步步推进第6行。你还可以进入函数,看看它们会把你带到哪里。你可以断点做很多事情,它非常有用。如果你连断点都不会用我真不知道你在编什么程。

在Visual studio 中你可以在光标的那一行按F9就可以给这一行设置断点。或者你可以点击截图中的侧边栏设置断点。
在这里插入图片描述
还有一个你必须要确认的是配置要处于DEBUG模式下,Release模式下断点不生效
在这里插入图片描述
如果点击本地windows 调试器,这确保我们实际上是在附加调试器的情况下运行的。我们的程序将会运行。
在这里插入图片描述
我们可以看到程序上有一个大的黄色的箭头,指示我们的程序当前暂停在这里。黄色箭头意味着这行代码实际上还没有执行
在这里插入图片描述
上面可以看到有个继续的按钮,它会像往常一样继续执行我们的程序
在这里插入图片描述
这里还有一堆按钮我们逐步或者逐过程
在这里插入图片描述
F11 逐语句 将进入这行代码中的前函数,如果这一行有函数
F10 逐过程 将跳到当前函数的下一行代码
Shift+f11 跳出 跳出当前函数回到当前函数的调用地方

通过设置断点和单步执行我们的程序,我们可以逐行逐行运行我们的整个程序,当你试图弄清楚你做错了什么时这当然非常有用。
在这里插入图片描述
我们把断点停留在int a =8 这一句时,因为此时还没有执行,所以a里面是一个垃圾值

内存

实际上有一个视图我可以用来查看我们程序的整个内存。调试->窗口->内存->内存1。它将显示我们所有的内存
在这里插入图片描述
在这里插入图片描述
最左边时内存的地址,中间是我们的数据,以16进制表示的数据,右侧是对数据的ascii 解释。如果你想知道一个变量的值,你需要知道它的内存地址。
在这里插入图片描述
在这里插入图片描述
例如获取a的地址,只需要输入&a 就可以知道a的地址。
为什么调式模式下程序会变得慢,是因为编译器可以让我们在调试模式下做一些额外的事情。编译器知道我们实际上正在创建一个变量,但是我们还没有初始化它,所以我们要做的是填充这段内存。如果我们正在调试我们的代码,我们可以查看内存。
我们按下F10,可以看到a的值已经改变,这里两个数字代表一个字节
在这里插入图片描述
我们定义一个字符串
在这里插入图片描述
在这里插入图片描述
可以看到它的值是一个地址值,我们通过地址去查找这个变量的值
在这里插入图片描述
可以看到值是Hello
显然我们的程序包含像变量周围的堆栈,这样的字符串在它的内存中被破坏,这只是在debug模式下存在的

记住一个程序实际上只是由内存组成,甚至是指令指针,我们正在执行的实际代码,所有这些都存储在内存中。因此,能够查看我们的内存是我们真正拥有的,真正需要的。并且通过设置断点,它可以让我们在给定的时间,在给定的代码行暂停我们的程序,实际上检查它,看看我们的所有的变量都设置了什么,当然,在运行代码时,它会非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值