建立一个好的调试环境 --介绍CV.EXE在DOS下的反汇编功能
当我们使用DEBUG调试程序时,命令的输入,屏幕结果的显示,寄存器内容的显示中依次进行的,这样,当监视程序执行时,屏幕不断的上卷,产生顾此失彼的感觉。特别是寄存器值的显示,由于缺少执行前后的比较,不容易发觉有那些寄存器的值发生了变化,给分析带来一定的困难。
CodeView的显示方式则设计得完全不同,使人一看就有一种赏心悦目的感觉。它将屏幕分成三个部分,分别作为反汇编程序、命令输入和寄存器的显示窗口,如果需要还可以增加一个监视窗口,当监视程序执行时,各自的变化在本身的窗口内显示,互不干扰。特别是寄存器窗口的设计,使得各寄存器的显示位置固定不变,其值的变化一目了然,对于FLAG值的显示更具特色,不同的状态采用不同的颜色来显示,变化更加醒目。
二、采用不同类型的输出格式来显示表达式和存贮器的值
在DEBUG中使用D命令时,存贮器的值仅能用十六进制的值来显示;而使用H命令时,也只能计算十六进制的值,如果要知道这些值的十进制的值等于多少,就无能为力了。为克服这些缺点,CodeView在显示表达式和存贮器的值时,可以自行设定不同的输出格式。例如,从DS:200处开始放入了字符串“ABCD”,使用不同输出格式时的显示结果为:
输出格式 显示结果
8-bit 十六进制 DS:200 L4 41 42 43 44
16-bit 十进制 DS:200 L4 16961 17475
ASCII码 DS:200 L4 ABCD
这的确给调试者带来极大的方便。
三、采用多种的方式来设置断点,在重新调入程序时原有断点并不消失,使调试时更加容易。
DEBUG中,只有G命令可以设置断点,这需要我们首先对程序有一基本了解之后才能进行设置,如果某一断点设置失败,将程序再次调入时,精心设置的断点全部消失,原来的调试全部白费;即使记得调试过程,也要重新将这些断点再次输入,这种多次重复性的工作,很容易使人感到厌倦。
CodeView在设置断点方面作了重大的改进,第一,它采用了多种多样的方式来设置断点,除了保留DEBUG中的G命令以外,还可以监视或者跟踪的方式来设置断点,使程序调试更加方便。例如,如果要想在下面一程序行
MOVE AH,24
设置断点,利用监视方式,只要键入下面的命令
WP? AH-24==0
就可以了。又如,要跟踪存贮器CS:204内数值的变化,只要键入下面的命令
TP CS:204
则当CS:204的值发生变化时,程序将停止运行。
其次,对于同一程序,凡是已设置过的断点,尽管程序多次调入,它们也不会消失,这种方式使你重新调入程序时,可以在前一次的调试的基础上继续往下进行,换句话说,虽然程序是多次调入的,但调试却是连续的。
四、将实际屏幕显示和调试显示分开,两者互不干扰,但调试者可以在两者之间自由转换。
当我们设计一个软件的屏幕封面时,为使其更加美观,一般都是采用图形方式,如果使用DEBUG来调试这种程序,就十分棘手。
CodeView采用了一种全新的方式来解决此问题,它将实际的屏幕显示和供调试用的屏幕显示看成是两个独立的窗口,用户在调试窗口内工作时,可以随时转换到实际屏幕显示来观察显示结果,两者互不干扰。这种设计方式巧妙地解决了两者同时使用屏幕的矛盾。
五、适用于各种语言的表达式
在CodeView调试程序时,如果要求出表达式的值,由于不同的语言采用了不同的规范,因而书写时必须加以注意。CodeView可以根据原程序的类别来选择C、FORTRAN、BASIC等语言的表达方式,这就给程序调试者多种选择。例如:要求出A和B的“与”运算值,C语言的表达式为
A&&B
而BASIC语言的表达式为
A AND B
在DOS状态下使用CodeView时,可以根据自己对程序熟悉的程度来设置相适应的语言方式,一般说来,使用C语言比较好,这样能获较高的运行速度。
六、增加一种慢速运行的方式,使用者可以观察到程序的运行状况,并可以随时利用任何键使程序停止运行。
用DEBUG来调试程序时,为了监视某一数值的变化,需要不断使用Tn命令或Pn命令,但由于屏幕不断的滚动,观察十分不方便,稍不留意,则前功尽弃。CodeView为了改善这一不足之处,在控制运行程序时,增加了一种慢速运行方式,调试者可以通过这种方式,很清楚的看到程序的运行情况,可以在不同窗口内观察运行时各值的变化;当我们认为需要程序停止时,可以按任一键中断,然后继续以后的调试工作。
CodeView还具有很多独特的优点,使用者可以随时通过热键ALT-H获得帮助,在此就不再赘述了。 (四川 王盛华)