多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

老板雇我来公司写Bug

老板雇我来公司写Bug 文章目录啥是Bug??什么是调试(debug)??debug和release之间的区别是什么呢?调试快捷键监视和内存观察监视内存调试测试总结啥是Bug??bug本意是昆虫或者虫子,现在一般是指在电脑系统或者程序中,隐藏着的一些未被发现的缺陷或问题,简称为程序漏洞。Bug的创始人是格蕾丝·赫柏(Grace Murrary Hopper),她是一位美国海军电脑专家,1947年9月9日,格蕾丝·赫柏对Harvard Mark Ⅱ设置好17000个继电器进行完编程,技术人员启动机器,突然停止了工作,于是工人们去寻找原因,最后竟然发现是一只飞蛾飞到了触点上然后被高电压击死,因此在报告中赫柏用胶条贴上飞蛾,使用bug表示一个在电脑程序里的错误,Bug这个说法一直沿用至今.什么是调试(debug)??当我们发现程序里面有问题,那么我们就要找到它,解决这个问题找问题的过程被称之为调试,英文名为debug(消灭bug)debug和release之间的区别是什么呢?在vs上编写代码的时候我们经常看到这个选项那么这个debug和release是啥意思呢?debug通常称之为调试版本,它包括调试信息并且不做优化,便于程序员去调试程序,我们在写代码的时候经常去调试代码,就把这里设置为debug,这样编译产生的debug版本的可执行程序包括调试信息可以直接调试release称之为发布版本它通常是进行了各种的优化,让程序在代码大小和运行速度上都是最优的,方便用户很好的使用,当程序员写完代码并且调试完成,程序的质量符合用户的使用标准这时就会设置为release,编译产生的是release版本的可执行程序,这个版本是用户使用的,不用包含调试信息同一段代码编译生成的可执行文件的大小,release版本更小,debug版本更大因为release版本是优化过的并且不包含调试信息调试快捷键一下是调试最常用的几个快捷键:F9:创建断点和取消断点断点:断点的作用就是可以在程序的任意位置设置断点,打上断点就可以使程序执行到想要的位置暂停执行,接下来我们就可以配合F10,F11这些快捷键观察代码执行细节F5:启动调试,用来直接跳到下一个断点处,一般和F9配合使用F10:逐过程,通常用来处理一个过程,一个过程可以是一次函数调用,或者一条语句F11:逐语句,就是每次都执一条语句,但是这个快捷键可以让我们的执行逻辑进入函数内部在函数调用的地方想进入函数观察细节必须使用F11,如果使用F10会直接完成函数调用.ctrlF5:开始执行不调试,如果想让程序直接运行起来而不调试就可以直接使用监视和内存观察在调试的过程中如果要观察代码执行过程中,代码环境中的变量的值我们可以通过监视和内存观察,这些观察方式的前提条件一定是开始调试后观察的例如下面这段代码intmain(){inta[10]{0};inti0;for(i0;i10;i){a[i]i1;}return0;}监视开始调试后如下图操作打开监视窗口进入监视窗口后输入我们想要监视的变量或者数组等的名字然后一步步去调试我们就可以看到这些变量是如何变化的还有一个要注意的点就是当我们监视二维数组的时候不是简单的敲上二维数组的名字就行,还要再写上我们要监视几行例如有一个二维数组a[10][10],当我们要监视它的前五行时候打开监视窗口,然后在名称列输入: a,5 即可同理一维数组也是例如有一个一维数组b[10]我们想监视它所有的元素那么我们在监视窗口的名字列输入: b,10 即可二维数组我们选择了监视的行可以展开查看列内存注意我们想要观察谁就在谁的名字前面加上取地址符就行啦,数组就不用了因为数组名就是数组的首地址除此之外我们还有自动窗口自动窗口会根据我们的代码自动给出这些要监视的变量根据我们一步步的调试这些被监视的变量会消失或者出现,这样一来就不太利于我们去观察变量的变化了,因此我们只了解了解即可,平常我们依旧使用监视窗口来监视我i们想要监视的变量调试测试请大家在VS2022,X86,Debug的环境下,编译器不做任何优化,下面代码的结果是什么??#includestdio.hintmain(){inti0;inta[10]{1,2,3,4,5,6,7,8,9,10};for(i0;i12;i){a[i]0;printf(haha);}return0;}最后这个代码会陷入死循环,为啥呢?数组越界应该报错呀,为什么会死循环呢?我们无论如何是想不出来的,只有去调试才能知道这个代码中到底发生了什么导致死循环.其实这里是有一个巧合,这里我们一直让下标变化到了12,其实i的地址和a[12]的地址重合了因此导致了这组函数陷入了死循环,当然这种巧合是在我们这个代码环境中的如果我们的代码环境变了其实也不会造成这种巧合所以当我们遇见我们无法理解的情况的时候一定要去调试,调试完后我们就会恍然大悟,原来如此总结本文系统地介绍了 C/C 程序调试的核心概念与实用技巧Bug 与调试基础从 Bug 的历史起源到调试的基本定义明确了调试就是发现并解决程序问题的过程。Debug 与 Release 模式详细对比了两种编译模式的区别Debug 版本包含调试信息便于开发调试Release 版本经过优化适合发布使用。调试快捷键掌握了 F9断点、F5启动调试、F10逐过程、F11逐语句等核心快捷键的使用方法。监视与内存观察学会了在调试过程中通过监视窗口和内存窗口观察变量值的变化这是理解程序运行状态的关键手段。实战调试案例通过数组越界导致死循环的经典案例展示了调试在解决复杂问题中的不可替代性。调试不仅是解决问题的工具更是深入理解程序运行机制、提升编程能力的重要途径。掌握这些调试技能能够帮助开发者更快定位问题、更深入理解代码执行逻辑从而编写出更健壮、更高效的程序。记住当代码行为不符合预期时不要只是猜测打开调试器让程序自己告诉你发生了什么每日一问:今天你调试了吗?
返回列表