《Effective Debugging:软件和系统调试的66个有效方法》——第13条:使自己尽可能多地观察到与调试有关的数据...

本节书摘来自华章计算机《Effective Debugging:软件和系统调试的66个有效方法》一书中的第2章,第13节,作者[希]迪欧米迪斯·斯宾奈里斯(Diomidis Spinellis),爱飞翔 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第13条:使自己尽可能多地观察到与调试有关的数据

我们在调试的过程中要处理大量数据,并且要把各式各样的数据关联起来,如源代码、日志文件中的条目、变量的值、栈的内容、程序的I/O以及测试的结果等。这些数据通常是由多个处理流程与计算主机所产生的,如果能够把它们全都适当地展示在调试者眼前,那么将会给调试工作带来很多的好处。首先,可以使我们发现数据之间的相互关系。例如,我们可以看到:当测试失败的时候,日志文件中会多出来一条记录。其次,它可以令人尽量保持专注,避免因为来回切换而使思路受到干扰。有时我们必须进入完全专注的状态(参见第9条),才能找到数据之间的关键联系,可是如果在进行单步调试的过程中总是要通过输入命令或切换窗口来查看某些变量的值,那么我们就无法保持这种专注的状态了。此外,留出足够的空间来显示较长的代码行,也能够帮助我们发现一些可能会错过的模式。你或许会按照很多代码风格指南所提倡的那样,把编辑器的窗口宽度设为70至80列,但是如果日志文件和栈跟踪信息中的某些行比较长,那么为了符合这个80列宽的限制,它们会分成很多行来显示,而这样是不利于进行阅读与分析的。因此,我们可以使编辑器在水平方向上尽量占满整个显示器,这样其中的某些模式就会自然地浮现出来,如图2.1所示。下面给出几条建议,希望能够帮助大家在调试时看到更多的数据。

第一条建议是:尽量扩大显示区域。很多人都使用两台或两台以上的高分辨率显示器来做开发。(用廉价的大屏幕电视机是不行的,因为它们显示出来的字符很模糊。)要想同时使用多台显示器,就必须配备功能强大的显卡接口。如果你用的是笔记本,那么可以外接一台显示器,把笔记本的屏幕延伸到那台显示器上(而不是使两者显示完全相同的画面),这样做可以增加你所能够看到的内容。无论是使用台式机还是笔记本,都应该把编辑器或终端机的窗口切换到全屏模式,这种显示效果在当前的全高清(full HD)显示器上面或许显得有点笨拙,然而对于某些调试任务来说却是必不可少的,因为它使得我们能够在横向和纵向上尽可能多地看到相关的数据。如果切换到全屏模式之后还是无法把数据显示到整个屏幕中,那么可以考虑把字体调小(并戴上眼镜),或是使用投影仪。

《Effective Debugging:软件和系统调试的66个有效方法》——第13条:使自己尽可能多地观察到与调试有关的数据...

把数据打印出来也是个相当有效的办法。激光打印机在600dpi的分辨率下,就可以把6600×5100像素的内容显示在与信纸大小相同的纸张上面。这样打出来的数据要比显示器更多,而且看起来也更为清爽。数据结构的定义以及代码清单等变化不太频繁的数据,可以打到纸上,以便给显示器留下更多的空间,用来展示那些在调试过程中频繁变动的数据。笔者最后要说的是,打印程序代码的最佳纸张,肯定是15英寸的绿线条折叠纸(green bar fanfold paper),这种纸横向可以打132列,并且能够沿着纵向一直打印下去。如果你现在还有一台能够处理这种纸张的打印机,那就用它来打印代码吧。你要好好守着它。

要点

  • 如果能够同时看到比较多的数据,那我们就可以更加专注地进行调试,从而找到数据所体现出的模式以及数据之间的相互关系。
  • 尽可能地将显示区域扩至最大。
  • 把相对静态的数据打印到纸上。