文件名称:排错系统-vmware虚拟机中centos安装 centos安装qt的教程图解
文件大小:8.63MB
文件格式:PDF
更新时间:2024-06-29 06:30:00
程序设计实践
5.1 排错系统 重要语言的编译系统通常都带有一个复杂的排错系统。它常常是作为整个开发环境里的 一个组成部分,在这个环境里集成了有关程序建立和源代码编辑、编译、执行和排错的各种 功能。排错系统一般包括一个图形界面,使人能够以按语句或者按函数的方式分步执行程序, 在某个特定源程序行或者在某个特定条件发生时停下来等等。通常还提供了按照某些指定格 式显示变量值等许多功能。 在已知某程序里存在错误的情况下,可以直接启动排错系统。有的排错系统也可以在程 序执行中发生某些未预料到的问题时自动取得控制。当程序死了的时候,通常很容易确定它 执行到了什么位置:只要检查活动的函数序列 (追踪执行栈 ),显示出局部和全局变量值。这么 多信息可能已经足够标识出错误了。如果还不行,利用断点和单步执行机制,可以一步步地 重新执行程序,找到某些东西出问题的第一个位置。 在一个正确的环境里,对一个有经验的使用者,好的排错系统确实能使排错工作很有成 效,工作效率也很高,人们甚至一点都不觉得烦恼。有了这样强有力的工具在手边,为什么 我们还要考虑在不用它们的情况下做排错工作?为什么还需要整整一章来讨论排错问题呢? 确实有一些重要原因,有些是客观的,另一些则是来自个人的体验。一些在主流之外的 语言并没有排错系统,或者只有非常低级的排错功能。排错系统是依赖于具体系统的,因此, 当你在另一个系统中工作时,可能就没法使用你很熟悉的排错系统。有些程序用排错系统很 难处理,例如多进程的或多线程的程序、操作系统和分布式系统,这些程序通常只能通过低 级的方法排错。在上述这些情况下,你只能依靠自己,除了打印语句、自己的经验和对代码 的推理能力之外,无法指望能得到多少其他帮助。 作为个人的观点,我们倾向于除了为取得堆栈轨迹和一两个变量的值之外不去使用排错 系统。这其中有一个重要原因:人很容易在复杂数据结构和控制流的细节中迷失方向,我们 发现以单步方式遍历程序的方式,还不如努力思考,辅之以在关键位置加打印语句和检查代 码。后者的效率更高。与审视认真安排的显示输出相比,通过点击经过许多语句花费的时间 更长。确定在某个地方安放打印语句比以单步方式走到关键的代码段更快,即使是你已经知 道要找的位置。更重要的是,用于排错的语句存在于程序之中,而排错系统的执行则是转瞬 即逝的。 使用一个排错系统,盲目地东翻西找绝不可能有效率。通过排错系统帮助发现程序出毛 病的状态,则常常很有帮助。而在此之后,我们就应该仔细想想问题为什么会发生。排错系 统是一类神秘的和难于使用的程序,特别是对初学者而言,它们带来的困惑可能比帮助还大。 如果你提出的是一个错误的问题,它通常也能给出一个回答,但你可能就在不知不觉中被引 错了方向。 排错系统可以是一种无价之宝,你确实应该在自己的排错工具箱里包括这种东西,它也 很可能是你打开的第一个工具。但是,如果你没有排错系统,或者你要攻克的是极端困难的 问题,本章的技术将能对你有所帮助,使你的排错工作有成效,效率更高,因为它们主要是 94计计程序设计实践 下载