排错是一个相当艰苦的过程,究其原因除了开发人员心理方面的障碍外,还因为隐藏在程序中的错误具有下列特殊的性质: (1) 错误的外部征兆远离引起错误的内部原因,对于高度耦合的程序结构此类现象更为严重; (2) 纠正一个错误造成了另一错误现象(暂时)的消失; (3) 某些错误征兆只是假象; (4) 因操作人员一时疏忽造成的某些错误征兆不易追踪; (5) 错误是由于风时而不是程序引起的; (6) 输入条件难以精确地再构造(例如,某些实时应用的输入次序不确定); (7) 错误征兆时有时无,此现象对嵌入式系统尤其普遍; (8) 错误是由于把任务分布在若干台不同处理机上运行而造成的。
在软件排错过程中,可能遇到大大小小、形形色色的问题,随着问题的增多,排错人员的压力也随之增大,过分地紧张致使开发人员在排除一个问题的同时又引入更多的新问题。
尽管排错不是一门好学的技术(有时人们更愿意称之为艺术),但还是有若干行之有效的方法和策略,下面介绍几种排错方法。
2. 排错方法
无论采用哪种排错方法,目标只有一个,即发现并排除引起错误的原因,这要求排错人员能把直观想象与系统评估很好的结合起来。 常用的排错策略分为三类: ① 原始类(brute force) ② 回溯类(backtracking) ③ 排除类(cause eliminations)
原始类排错方法是最常用也是最低效的方法,只有在万般无奈的情况下才使用它,主要思想是“通过计算机找错”。例如输出存储器、寄存器的内容,在程序安排若干输出语句等,凭借大量的现场信息,从中找到出错的线索,虽然最终也能成功,但难免要耗费大量的时间和精力。
回溯法能成功地用于程序的排错。方法是从出现错误征兆处开始,人工地沿控制流程往回追踪,直至发现出错的根源,不幸的是程序变大后,可能的回溯路线显著增加,以致人工进行完全回溯到望而不可及。
排除法基于归纳和演绎原理,采用“分治”的概念,首先惧与错误出现有关有所有数据,假想一个错误原因,用这些数据证明或反驳它;或者一次列出所有可能的原因,通过测试一一排除。只要某次测试结果说明某种假设已呈现倪端,则立即精化数据,乘胜追击。
上述每一类方法均可辅以排错工具。目前,调试编译器、动态调试器(“追踪器”)、测试用例自动生成器、存储器映象及交叉访问示图等到一系列工具已广为使用。然而,无论什么工具也替代不了一个开发人员在对完整的设计文档和清晰的源代码进行认真审阅和推敲之后所起的作用。此外,不应荒废排错过程中最有价值的一个资源,那就是开发小组中其他成员的评价和忠告,正所谓“当事者迷,旁观者清”。
前面多次提到,修改一处老问题可能引入几处新问题,有时程序越改越乱,但若能做到每次纠错前都扪心自问三个问题,情况将大为改观: ① 导致这个错误的原因在程序其他部分还可能存在吗? ② 本次修改可能对程序中相关的逻辑和数据造成什么影响?引起什么问题? ③ 上次遇到的类似问题是如何排除的? |
相关推荐
### 思科11种设备和配置的基本排错方法、命令及技巧汇总 #### DHCP 排错技巧 1. **VLAN 分配错误**:确保PC连接至正确的VLAN(如SW2上的VLAN),检查VLAN配置是否正确,包括VLAN ID、地址分配等。 - 命令示例: ...
本资源摘要信息主要介绍BGP路由协议的配置和排错,涵盖了BGP协议的基本概念、配置方法、排错策略和常见问题解决方案。 一、BGP协议概述 BGP是一种基于路径矢量路由协议,能够掌控互联网上的几十万条路由。其强大的...
本PPT重点讲解了BGP的基础知识、配置步骤以及常见问题的解决方法。 BGP的强大之处在于它对路由的控制能力,而非像IGP(内部网关协议)那样专注于学习路由。BGP没有复杂的路由算法,而是通过一系列可定制的属性来...
1. **ISIS协议基础**:了解ISIS的基本原理,包括层次结构(Level 1和Level 2)、Hello报文类型(L1和L2 Hellos)、邻居发现、链路状态数据库的构建以及SPF(Shortest Path First)算法的运行。 2. **ISIS配置**:...
了解这些调试器的基本用法是高效排错的第一步。 2. **使用调试器设置断点** 断点允许程序在特定位置暂停执行,以便于分析其当前状态。在关键代码段或可能导致问题的地方设置断点,可以帮助我们更准确地定位问题。 ...
文章首先介绍了排错的基本概念,指出排错是找出程序运行结果与预期不符的原因并予以解决的过程。在遇到难以复现或无源码可参考的复杂问题时,排错更具挑战性。书中通过一系列具体的例子,如ASP.NET程序Session丢失、...
- **Hello/Dead Interval**:确保HELLO和DEAD定时器一致,这是建立邻接关系的基本条件之一。 - **Network Type**:确认网络类型一致,例如点到点、广播等。 - **Area-ID**:确保路由器位于同一区域。 - **Area-Type*...
1. BIOS自检:计算机启动时,首先执行的是BIOS(基本输入输出系统)。它检查硬件设备并传递控制权给引导程序。如果BIOS设置错误,如引导设备顺序错误,可能会导致启动失败。此时,你需要进入BIOS设置界面进行调整。 2...
书籍详细地介绍了多种排错技巧,并通过大量案例分析,帮助读者深入理解每一种排错方法的应用场景和实施步骤,让读者仿佛置身于真实案例之中,提升解决实际问题的能力。本书特别适合软件开发人员、技术支持工程师以及...
总之,《Windows用户态程序高效排错》是一本全面的排错指南,涵盖了从基本工具使用到高级调试策略的各个方面,旨在提升读者在Windows环境中解决程序错误的能力,对于提升软件质量和稳定性具有重要意义。
当遇到LVM相关的问题时,有效的故障诊断和排错方法至关重要。本文将详细介绍如何使用`lvmdump`命令进行LVM的排错和诊断。 首先,我们需要理解LVM的基本概念。LVM由物理卷(Physical Volume,PV)、卷组(Volume ...
以上内容涉及的知识点和步骤对于思科认证考试中的排错部分是基本要求,同时也为实际工作中网络的排错提供了基本框架。在实际操作中,每个步骤都需要细致的工作和对网络原理的深刻理解。通过上述步骤,技术人员能够...
为了有效地解决问题,了解一些基本的排错方法和技术是非常重要的。 #### 排错方法 - **观察**:建立一个基准线来判断哪些情况是正常的,哪些情况是异常的。 - **知识**:了解当前组件的工作原理及其与其他组件之间...
文档通过一系列的实际案例,展示了排错的思路、技巧及方法,并对其中涉及的关键技术和工具进行了详细的说明。 #### 关键知识点 ##### 一、排错思路与技巧 1. **思考问题**: - **热身运动**:通过简单的案例引入...
除了以上提到的各种排错方法之外,还有一些非常有用的工具可以帮助我们更高效地完成排错任务: - **Netdiag**:用于诊断网络问题。 - **Dcdiag**:专门用于检测域控制器的问题。 - **Nslookup**:用于查询DNS记录。...