调试思维系统化与高效性思考

@作者 DreamCompass
@日期 2019年8月4日
2019年8月3日
调试思维系统化与高效性思考
0.必要性分析,解决方案的存在性,唯一性讨论

  1. 需求分析:
    快速解决问题,注意根本目的不是找到出错原因,找到出错原因只是解决问题的其中一种方法
    高效性,系统性
    调试问题时的问题与需求高效性系统性(如何有条不紊的调试,避免情绪影响?)
    如何调试?
    如何尽可能的减少误判?(包括本来现象是对的,被自己误判为有错;现象有错,但调试过程中逻辑推理出现误判,特别是排除法时,误判可能导致南辕北辙,同时如何尽可能避免专业知识背景对误判的影响?以及避免因自身认知错误导致的调试判断出错)
    如何保证调试时的可回退,防止调试给原有系统引入新的问题?(能干事,不惹事,不出事)
    面对黑盒系统或者灰盒系统时怎么去调试?(对系统的工作原理和技术细节根本不了解或者知之甚少时怎么办?亦或是对系统的工作原理和技术细节只能了解少部分或者大部分,不完全了解系统或者问题实体时又该如何处理?)
    遇到难以复现或者不能复现的错误如何处理?(模拟发生的条件,提高复现频率,但所造条件并不是导致问题的充分条件,或者说所模拟的条件有时与真正导致问题的原因并不相关)
    如何从看似随机的现象中找出其规律,并发现其本质,进而解决问题?

  2. 认识问题
    问题表现出的特征:
    不可控(完全不可控和部分不可控,部分情况下并不能确定对象是否处于被控状态),随机性(未被控状态下的随机和被控状态下的随机),
    现象的冗杂性(多种不正确的现象),
    现象原因的冗杂性(多种错误复合交叉导致形成)
    分析问题导致错误的原因:偶然性错误,对应性错误,逻辑性错误

  3. 方法论:
    必要性分析,解决这个问题是否有必要,是否重要?在整个项目中是否重要?是否有可替代的方案(常用的替代方案有:找现有没有问题的成果,例如源码,工程文件,硬件)如果必须解决现有错误的对象的错误问题,先预估解决问题的成本,即自己解决错误的成本和其他方式解决错误的成本,包括请教别人和网络搜索,有些问题自己根本无法解决时,知识库,经验库,逻辑思维无法解决时应当请教他人或是网络搜索。
    有必要在错误对象上解决错误时,有参考的实体时,先保证规范性和标准性,先保证能够正常运行的一些基本必要条件。包括硬件上和软件上能够正常工作条件的完备性,是不是要正常工作还需要其他的什么条件?保证代码规范性因为需要对比有时需要花费较多时间。是否其他的程序能够正常在硬件上运行?是否该程序能在其他的硬件上工作?如果一个正确的程序下载同样的硬件电路中,其他条件一样的前提下,现象正确,则证明是软件部分问题;如果同一个程序下载到另外一块好的板子上,能够运行证明,自己的板子与好的那块板子不一样。是否是按照范例来的,对范例的可靠性评价),即参考正确的代码进行对比,排除系统的其他所有可能因素,多的代码,硬件等 。
    无参考的东西时,先大致区分出此问题是否包括硬件问题硬件故障硬件连接不对应?具体分为与程序不对应实体的接线,硬件不对应软件上的程序查看端口是否正确连接,连接是否可靠。同时还应当用万用表检查电路,看应当开路的地方是否开路,应当短路的地方是否短路,电源地线连接是否可靠,该共地的地方是否共地;元件是否有问题软件上的错误,具体分为:语法错误:逻辑错误:基本的逻辑错误;由语法导致的逻辑错误;语句执行顺序的逻辑错误;工程环境配置错误:例如工程配置里的晶振频率,程序中配置的参数等

方法概要
回溯法
对照法
二分法
控制变量法:分治法(对系统进行拆解):硬件错误,软件错误;子系统错误经验法:建立经验库,寻求经验库,推断最有可能的原因

  1. 参考文章
    像个专业人士一样去调试Bug
    https://blog.csdn.net/hzy38324/article/details/78639329
    内容提要:
    采用分而治之的方法,定位多模块的系统问题和修复由多个子问题引发的问题。一次只修改一个地方做好修改记录如果正向调试走不通,不妨试一下反向调试法最后一招:求助他人
    程序猿和测试攻城狮崩溃的瞬间,这比喻太形象了,你是否已笑喷~https://blog.csdn.net/weixin_43957964/article/details/852244774.
    程序员从复杂代码中找BUG的5种方法,你用过几个?https://blog.csdn.net/qq_39707996/article/details/78869811
    内容提要:二分法定位错误IDE调试(断点,单步调试等)重新读一遍代码重新写一遍代码(代码比较短的话)解释每一行程序作用
    那些年你在STM32上被困住的难题,今天我们给你总结了https://www.sohu.com/a/197887471_100040248
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值