专栏首页小白帽学习之路怎么快速修复 bug ?

怎么快速修复 bug ?

前言 写 bug 和改 bug 是每个程序员都绕不过的话题,在编写代码的过程中,相信大家肯定遇到过这种情况:代码编译通过,没有语法错误,但是运行结果却报错或和预期不同,反复检查了很多遍,仍然无法修复错误 。 那么,当我们一不小心"小手一抖",又写出一个 bug 时,如何快速修复 bug 呢? 答案必须是调试。 所谓调试,就是控制代码的执行速度,追踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值、或者内存中的数据;也可以让程序继续执行若干语句,看看程序到底执行了什么代码。 优秀的集成开发环境必然会提供优秀的调试机制,优秀的程序员必然掌握优秀的调试技巧。接下来我就以 VS2019 为例,盘点一下常用的调试技巧。

首先,用一张图快速概括一下调试的基本流程

为了使大家更容易理解具体的调试步骤,此处先对调试的基本概念做一个梳理:

断点:所谓断点(BreakPoint),可以理解为障碍物,人遇到障碍物不能行走,程序遇到断点就暂停执行。

逐语句调试:逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面。

逐过程调试:逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。

跳出当前执行过程:跳出,是当你进入到函数内,跳出可以让你直接执行函数内剩余的语句,直到返回到该函数被调用时的后面的语句处。

监视窗口:程序执行完某条语句时,使用监视窗口可以查看程序中变量的具体内容、程序中的内存状态、程序中的寄存器状态等。

下面为大家演示一下具体的调试步骤:

首先要做的是设置断点,为启动调试作准备。

如果没有设置断点直接启动调试,就会导致调试失败,因为程序执行过程中没有中断,程序就会依次执行直到执行结束或者报错返回。

设置断点和取消断点的方式非常简单,直接单击侧边栏即可新建/取消断点。

断点设置成功后,即可开始调试。点击菜单栏 调试 - 开始调试 。

进入调试状态后,即可开始对程序的单步调试,这里强调一下逐语句调试和逐过程调试这两个相似操作的区别。

程序进入调试状态后,观察上面的gif,可以看到,此时指向的语句是第 50 行代码:

Enigma(plain);   //输入明文计算出密文。

此时如果使用逐过程调试(F10),则不会显示 Enigma 函数每一步的执行过程,而是将该函数的执行过程运行完后,直接转到当前函数的下一条语句,也就是第 51 行语句。

但是如果使用逐语句调试(F11),就会进入 Enigma 函数,执行该函数中的每一条语句,也就是跳转到第 6 行语句。

此处使用逐语句调试,进入 Enigma 函数内部调试。

使用监视窗口,可以帮助我们更好的观察程序的运行状态,下面演示一下如何使用监视窗口观察程序中的变量变化。

如果没有监视窗口,首先要做的就是将监视窗口调出来,点击顶部菜单栏 调试 - 窗口 - 监视。

在代码中选中想要监视的变量,将其拖拽到自定义的监视窗口中,然后我们就可以一边单步调试一边查看变量变化了。

如果想要除监视变量,直接在监视窗口右键选择删除对某个变量的监视或者全部清除即可。

定位到代码的bug处后,在顶部菜单栏点击调试 - 停止调试 即可结束调试流程。

本文分享自微信公众号 - 程序员阿甘(gh_a2e36d69d566),作者:不爱学习的程小媛

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最强IDE VS2019安装使用详细教程!

    作为“宇宙最强”的集成开发环境 IDE,微软的 Visual Studio 如今不仅支持推出了苹果 macOS 上的 VS for Mac 版本,Windows...

    7089bAt@PowerLi
  • 破解密码的手段总结

    黑客最常用的一个攻击方式,就是获取目标口令,有了对方密码口令,就相当于有了你家的入户门钥匙,那么接下来所面临的危险就可想而知了。

    7089bAt@PowerLi
  • Kali Linux Web渗透测试手册(第二版) - 8.4 - 使用OWASP ZAP进行扫描漏洞

    OWASP ZAP是我们已经在本书中用于各种任务的工具,在其众多功能中,它包括一个自动漏洞扫描程序。 它的使用和报告生成将在本文中介绍。

    7089bAt@PowerLi
  • 图文并茂教你学会使用 IntelliJ IDEA 进行远程调试

    今天线上出现了个 Bug ,而且比较坑的是涉及到微信相关的东西不能线下调试。传统方式是在代码中各种的日志 log 埋点然后重新部署进行调试,再根据 log 中的...

    码农小胖哥
  • 初探Windows用户态调试机制

    最近写Named Pipe Server Using Completion Routines 发现在delphi调试器中会阻塞在:

    战神伽罗
  • 移动端真机调试

    很多时候,我们在进行移动端开发时,都是先在PC端使用手机模拟器进行调试,没有问题后,我们才会在手机端的浏览器进行测试,这个时候,如果没有出现问题,皆大欢喜。但是...

    grain先森
  • H5 App调试方法参考H5调试常见方法chrome developer tools模拟器GapDebugweinrespy-debugger代理总结

    相较于pc端,移动端调试要更加丰富一些,下面对调试的方法进行简单汇总。 主要分为以下几点:

    一个会写诗的程序员
  • 拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限

    在.net中调用时出现“拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限” 的错误的解决办法。 ...

    张善友
  • 初探Windows用户态调试机制

    最近在学习张银奎老师的《软件调试》,获益良多。熟悉Windows调试机制,对我们深入理解操作系统以及游戏保护的原理有着莫大好处。

    战神伽罗
  • 移动端网页调试

    还有还有,有哪位大佬推荐下前端开发的工作吗,base广州啊,不胜感激~关于我请戳blog下的resume.png?

    嘉明

扫码关注云+社区

领取腾讯云代金券