如何高效Debug(又名如何高效解决问题)

文章目录

  • 如何高效Debug(又名如何高效解决问题)
    • 简介
    • 阅读本文章须知
    • 导读
    • 接手别人的代码如何修改错误
      • 快速反应:fast_forward:
      • 1. 确定目标:golf:
      • 2. 重现错误 :recycle:
        • 放大错误
        • 遇到一个无法复现的错误
      • 3.索要或者搜索技术文档:diamond_shape_with_a_dot_inside:
      • 4. 检查传入的参数:parking:
      • 5.检查运行环境:information_source:
    • 在代码内寻找错误
      • 1. 寻找合适的工具:gear:
      • 2.重读程序:closed_book:
      • 3.测试参数:memo:
      • 4. 打印中间结果:card_index:
      • 5.检查判断伪判断语句:interrobang:
      • 6.控制变量(二分法定位):control_knobs:
      • 7.重构:repeat:
    • 在代码外寻求帮助
      • 1.搜索引擎或者程序员论坛:tada:
      • 2.向身边的同事或者朋友求助:person_frowning:
        • 提问之前
        • 当你提问时
          • 精确地描述问题并言之有物
          • 话不在多而在精
          • 描述问题症状而非你的猜测
          • 描述目标而不是过程
          • 询问有关代码的问题时
    • 了解 BUG 的等级
      • 投入时间:timer_clock:
      • 1级错误 致命错误 CRITICAL:warning:
      • 2级错误 严重错误 ERROR:red_circle:
      • 3级错误 一般错误 WARNING:small_red_triangle:
      • 4级错误 外观错误:information_source:
      • 不需要处理的 BUG:no_entry_sign:
    • 更多建议
      • 模块化编程
      • 最小可测试单元
      • 留下测试的数据
      • 写模块的时候请写函数注释
      • 使用版本控制工具 Git/SVN
    • 一些垃圾话
    • 结尾

简介

⭐️这是一篇通用 DEBUG 文章,这篇文章适用于大部分面向对象编程语言的 DEBUG⭐️

  • 如果你接手其他人的项目中出现了错误,这个文章可以给你一种解决错误的思路
  • 新手程序员可以通过这篇文章来学到一种 DEBUG 思路,尽管这可能不是最好的方案,但是这个方案足以应付大多数出现错误的情况
  • 你可能借助这篇文章知道你现在的 DEBUG 进入到了什么状况,还有什么情况没有考虑到,你是否还有其他办法解决你的 BUG

阅读本文章须知

  1. 文章中为了打字方便,大多数的 BUG 将会被翻译成中文错误
  2. 你需要有至少一门语言编程的经验
  3. 请不要大篇幅的跳读文章,这会导致你的阅读出现断层

导读

你将会了解到如何区分错误的等级,来根据不同的错误等级来请求他人的帮助,同时更加详细的错误等级同时也会提起他人的重视,然后你将会了解到在你接手代码或者准备尝试一些新的东西的时候你如何解决代码之外的问题,之后你会将目光聚焦到代码的内部,使用多种方法来更快的找到和解决错误,如果这都不能帮助你解决错误,那请尝试前往论坛或者请求身边的朋友帮忙,这篇文章会教你基础的如何提出一个好问题的方法,在文章的最后,留下了几点小建议,能够让你在写代码的时候能够更加轻松的方便后期维护,写出好的代码。

接手别人的代码如何修改错误

这一章大部分的情况都会出现在你第一次接手一个新的项目,或者拿到了一个新的模块进行测试会需要做出的准备,通常你需要弄清楚自己的问题,因为有可能这些代码在其他人的电脑上能够正常运行

你的目标是阅读最少的代码,将他人代码中的问题解决(如果是自己的代码出现问题请直接跳到下一章)

请不要在第一时间将你的错误丢给其他手头有工作的同事

请至少保证你为了解决这个错误做出了下面的这些努力,尽管这些努力没有效果

快速反应⏩

通常你可以不需要任何思考,直接将错误复制粘贴到百度或者其他搜索方法上直接进行搜索

例如:

现在报了一个错误,你可以直接复制你现在发生异常的错误报告去百度

('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

请不要复制错了信息,下面的内容不需要被复制,因为你需要将整个代码发一个帖子才能让下面的内容变得有意义

通常情况下一些小错误,经过网上其他人的解决办法就可以解决,但是如果依旧没法解决,你需要进行其他的步骤

1. 确定目标⛳️

明确你的目标,你脑海里面需要有一个设想,如果没有出错,这个程序应该显示一个什么样的结果,如果实现了这个效果,那么说明这个错误已经被解决了

这个目标并非是一成不变的,你的目标应该是一个范围,因为别人写的程序你很难完全按照自己想的方式运行, 但是你能够让他尽量的靠近自己的想象,如果你想要完全和自己希望的一样,你可能需要重写大量的代码,尽管功能实现了,但从团队的角度上看这可能是在浪费时间

  • 最好的情况下能够和你的预想一模一样,这当然是最好的
  • 你还需要想一个最差情况,虽然没有完成预想的功能,但是并不影响正常的使用,你也算解决了错误,或者说降级了错误的等级(把3级错误降级为4级的错误)

例如我现在需要一个图形界面,我希望他的按钮能够居中

这样就算是完美的符合了要求

但是可以有一个偏差,如果不影响正常的使用,下面这样也是可以的

2. 重现错误 ♻️

检查错误是否能稳定触发,如果可以触发条件是什么

请弄清楚错误的触发条件,他是在经过了哪些操作下才会报错

  • 例子

    • 点击某个框后就会进行报错
    • 当程序挂机一段时间就会自动崩溃
    • 提醒用户输入的时候报错跳出

你需要不断的缩小你出现错误的范围,最终缩小到一个小范围内你才能进行修改

放大错误

就如标题说的,把你的错误进一步放大

有些bug现象不太明显,那么就想办法增大它的破坏性,把现象放大。这只是个思路,具体怎么放大只能根据具体的代码来定

例如:美剧《豪斯医生》里有一集,怀疑病人心肺有问题,就让病人去跑步机上跑步,加重心肺负担,从而放大症状。

遇到一个无法复现的错误

一个不能复现的错误是程序的隐患,你需要提起注意,不能因为他自己能好而掉以轻心

有的时候遇到了一个错误,但是这个错误只会在一些非常偶然的情况下触发,而且通常不用修复自己就好了

  • 请做好每一次报错的记录
  • 将报错的日志提交缺陷文档,或者向上级反馈

3.索要或者搜索技术文档

如何高效Debug(又名如何高效解决问题)相关推荐

  1. SAP CRM 如何高效debug 查看BOL的值

    为了不涉及版权问题首先声明这个网上有英文版的 作者JerryWang大神.我觉得方便,所以分享一下. 背景:当我们debug crm程序时,很多BOL特别深,譬如要看  eh_onsave里的part ...

  2. mysql高效sql语句_高效SQL优化 非常好用的SQL语句优化34条

    高效SQL优化 非常好用的SQL语句优化34条 相关软件相关文章发表评论 来源:2011/2/13 9:38:43字体大小: 作者:佚名点击:576次评论:0次标签: 类型:电子教程大小:8.5M语言 ...

  3. 如何高效学习?科学高效的方法,助你轻松提高学习效率!

    在当今竞争激烈的社会中,学习成为了我们不可或缺的一部分.如何高效学习,提高学习效率,成为了许多人关注的焦点.本文将为你介绍一些科学高效的学习方法,助你轻松提高学习效率. 一.合理安排时间 合理安排时间 ...

  4. 高效程序员的45个习惯 pdf_如何培养孩子高效学习?养成高效学习的7 个习惯。建议收藏...

    "成功没有捷径,但需要一些好习惯."的确,如果将人的各种命运分解.揉碎,试图从中找出一些规律的话,那么良好的习惯,敢于抓住际遇的勇气是比天赋更为重要的东西.没有好习惯,孩子学什么都 ...

  5. php 高效缓存类,简单高效的文件缓存php类

    简单高效的文件缓存php类 class FileCache { public $keyPrefix = ''; public $cachePath = ''; public $cacheFileSuf ...

  6. 如何高效学习web_使用高效的Web工具改善您的业务

    如何高效学习web Everybody is thinking to very difficult solutions to improve their online businesses and p ...

  7. 【高效办公】Everything高效应用案例——软件基本信息篇

    软件基本信息篇 『20』Everything软件简介 "Everything"是Windows上文件名搜索引擎,其基于名称快速定位文件和文件夹.软件小巧轻便,高效易用,具有以下特点 ...

  8. 高效人士必备的高效工具与原则

    工具一:招聘面试的STAR原则 招聘面试是HR经理的一项重要工作内容,每个成功的经理人都必须具备高超的招聘面试技巧,使合适的人在合适的岗位上,创造岗位高绩效. 所谓STAR原则,即Situation( ...

  9. java oracle数据库高效分页查询_oracle高效分页查询总结

    探索查询语句: --分页参数:size = 20 page = 2 --没有order by的查询 -- 嵌套子查询,两次筛选(推荐使用) --SELECT * -- FROM (SELECT ROW ...

最新文章

  1. hdu1051 Wooden Sticks
  2. mysql锁相关讲解及其应用——《深究mysql锁》
  3. Maven常用的构建命令
  4. C++ STL string 简单使用
  5. arduino COM口被占用问题解决
  6. 【ARM-Linux开发】Wi-Fi 应用工具wpa_supplicant
  7. docker加载新的镜像后repository和tag名称都为none的解决方法
  8. 赋值运算不会提升数据类型,算术运算会提升类型
  9. oracle linux 镜像下载|【最新】oracle linux 8.1官网镜像下载,让你下载oracle linux不被坑!
  10. 外卖程序_淘宝客系统_淘客小程序-淘客系统,外卖返利程序,外卖程序,返利程序
  11. cnn视频下载软件附代码
  12. Rails笔记《一》Routing
  13. python语音信号处理(一)
  14. 短视频、移动AI……你关注的热点移动开发技术都在这
  15. SCRDet:Towards More Robust Detection for Small, Cluttered and Rotated Objects(摇杆旋转目标检测方法)
  16. Excel:12 个操作小技巧
  17. 【第五章】零基础学Python实战练习(明日科技书配套)
  18. style计算机词汇,法语词汇学习:计算机及网络词汇(3)
  19. 黑客攻防web安全实战详解笔记
  20. VMware、配置VMware vSphere 6.0 vMotion、DRS、HA和FT

热门文章

  1. 6. 设计模式之迭代思维:如何高效编程?
  2. 浅浅的记录一下seo搜索引擎优化
  3. RBP系统管理之地区管理
  4. Unity学习之Human fall flat创意工坊地图制作
  5. ISTQB认证考试通过秘籍 问题一、ISTQB是什么?有哪些分类? ISTQB(International Software Testing Qualification Board)是国际唯一权威的软
  6. LARS:LARGE BATCH TRAINING OF CONVOLUTIONAL NETWORKS论文阅读
  7. macos U盘引导安装
  8. 对统驭科目和特别总账标志的理解
  9. 2021-11-15 入门前端VScode必装的常用插件, HTML+CSS常用属性速记.
  10. 《庖丁解牛Linux内核》笔记之:汇编基础