计算机程序中错误的诊断和改正工具及方法.pdf

上传人:b*** 文档编号:993606 上传时间:2018-03-24 格式:PDF 页数:34 大小:1,021.72KB
返回 下载 相关 举报
摘要
申请专利号:

CN95108183.7

申请日:

1995.06.29

公开号:

CN1118473A

公开日:

1996.03.13

当前法律状态:

撤回

有效性:

无权

法律详情:

专利申请的视为撤回公告日:1996.3.13||||||公开

IPC分类号:

G06F11/28

主分类号:

G06F11/28

申请人:

坦德姆计算机公司;

发明人:

托马斯·D·金; 西斯·G·霍索恩; 约瑟夫·S·科辛斯基

地址:

美国加利福尼亚州

优先权:

1994.06.30 US 269,355

专利代理机构:

中国国际贸易促进委员会专利商标事务所

代理人:

邓迅

PDF下载: PDF下载
内容摘要

这里公开了一种用于在计算机系统中调试复杂计算机程序的改进的工具和方法。该工具从计算机的内存和/或远程存储器中提取出关键的调试信息并使用此信息图形化地描述出作为调试操作对象的程序的各组成函数间的调用关系。该工具利用用户通过图形用户接口直接在程序函数的图形表示上所执行的操作来接受调试命令。该工具通过图形用户接口接受用户命令并使用此相同的接口显示关键的调试信息的功能极大地方便了程序的调试。

权利要求书

1: 一种在具有计算机内存和图形显示输出设备的计算机系 统中调试计算机软件程序的方法,此方法包括如下步骤: (a)把要调试的软件程序装入计算机系统,软件程序中包含 多个相互间具有调用关系的函数; (b)将与程序有关的符号信息存入计算机系统的内存中,包 括定义函数间调用关系的信息; (c)将调试软件装入计算机系统; (d)从有调试软件的计算机内存中读出至少一部分符号信 息; (e)使用调试软件从符号信息中得出函数间的调用树关系; 以及 (f)使用调试软件在输出设备上输出图形显示以说明多个函 数中至少几个函数间的调用关系。
2: 权利要求1的方法,其中图形显示包含调用树图。
3: 权利要求1的方法,其中图形显示包含有环调用树图。
4: 权利要求1的方法,其中图形显示包含无环调用树图。
5: 权利要求1的方法,进一步包括如下步骤: (a)将调试命令输入计算机系统; (b)在调试软件的控制下以一种与调试命令一致的方式执行 软件程序; (c)与图形显示相关联,在输出设备上输出可视化表示,以说 明由调试命令结果所得的程序执行路径。
6: 权利要求5的方法,其中图形显示是调用树图。
7: 权利要求5的方法,其中输入调试命令的步骤包括在图形 显示上移动指示符以指示在程序中将要执行命令的位置的步骤。
8: 权利要求6的方法,其中在输出设备上输出可视化表示以 说明程序执行路径的步骤中包括以高亮度视频显示那些在调用树 图上代表已经执行了的函数的节点以及相关联的节点间的互连线 的步骤。
9: 一种用于调试程序的方法,包括如下步骤: 把要调试的程序的至少一部分的图形表示显示在计算机屏幕 上; 将图形表示上描述已执行了的程序部分的那些部分高亮度显 示; 通过将程序的图形表示上的指示符与程序中命令要执行的位 置相关联来输入调试命令。
10: 权利要求9的方法,其中图形表示是包含函数节点的调 用图,并且调试命令在与指示符相关联的节点处展开图形表示。
11: 权利要求9的方法,其中图形表示是包含函数节点的调 用图,并且调试命令在与指示符相关联的节点处压缩图形表示。
12: 权利要求9的方法,进一步包括如下步骤: 根据调试命令执行程序;并且 高亮度显示那些作为调试命令的结果的程序执行部分。
13: 权利要求9的方法,其中调试命令在计算机屏幕上改变 显示,而不会造成被调试的程序执行另外的程序步骤。
14: 一种在运行于客户/服务器环境中的软件程序中寻找并 改正错误的方法,客户/服务器环境中包含一个客户计算机和一 个服务器计算机,其中图形显示设备运行中连接到客户计算机,此 方法包括如下步骤: (a)将软件程序装入服务器计算机中,软件程序中包含多行 代码并在其中一行中有一个疏忽造成的错误; (b)将调试命令从客户计算机传送到服务器计算机; (c)在服务器计算机中执行调试命令; (d)将定义程序根据调试命令所走过的执行路径的信息从服 务器计算机传送给客户计算机; (e)在图形显示设备上显示至少一部分软件程序的图形表 示,包括作为调试命令结果的程序的执行路径指示。
15: 权利要求14的方法,其中显示包括软件程序调用树图。
16: 权利要求14的方法,进一步包括如下步骤: 在传送调试命令之前,将调试命令输入客户计算机,其中输入 调试命令的步骤包括移动指示符在图形显示上指示在程序中要执 行命令的位置的步骤。
17: 一种便于调试包含多个有调用关系的函数的软件程序的 计算机系统,包括: (a)用于执行程序的计算装置,包括用于存储定义程序当前 执行状态的信息的第一存储装置; (b)第二存储装置,与计算装置运行中相连,用于存储定义函 数间调用关系的符号信息; (c)读装置,用于读取至少一部分符号信息和状态信息并用 于从其中得出至少一些函数间的调用关系; (d)通讯装置,用于传送调用关系信息;和 (e)图形显示装置,与通讯装置运行中相连,用于接收调用信 息并基于调用关系信息生成程序执行路径的图形表示。
18: 权利要求17的计算机系统,其中图形显示装置包含图形 用户接口以接收用户调试命令并将命令传送给计算装置。
19: 权利要求17的计算机系统,其中图形表示是调用树图。
20: 权利要求18的计算机系统,进一步包括用于在图形显示 装置上生成可移动指示符图象的装置,其中用户接口包含使用程 序图形表示的相对位置和可移动指示符来定义调试命令的装置。

说明书


计算机程序中错误的诊断和改正工具及方法

    本发明涉及到用于寻找和改正计算机程序中错误的系统和方法,尤其是用于在软件调试过程中图形化地显示程序结构并控制程序执行的系统和方法。

    新生成的计算机程序常常有一个或多个疏忽造成的错误。某些软件错误可能导致软件系统的完全崩溃,而其它一些可能导致不正确的操作,虽然商业化软件开发者事实上会花费全部开发时间的50%~70%来检查计算机程序的错误并改正这些错误,但几乎不可避免地,甚至在发行给公众的软件的产品版本中也存在一些错误(故障)。因此,极其需要一种高效和有力的调试软件的方法。

    调试是识别并分离出一个软件错误以改正这个问题的过程,通常这个过程包括检查构成软件程序的代码行并/或观察程序地执行以确定异常操作的原因。

    在调试程序的现有技术中,用户可能首先一行行地阅读程序以试图寻找错误或多个错误。然而,即使在一个比较简单的程序中,通过一行行地阅读程序来跟踪程序流程可能会是极其困难和耗时的。如果程序包括许多循环、子程序、函数调用、变量和诸如此类的东西,用户可能无法跟踪程序执行的顺序,因此不能确定计算机程序每一行执行的效果。

    “调试器”是一个软件诊断工具,它提供给用户观察并控制程序执行(包括程序状态和变量的值)的机制以帮助用户识别程序代码中的错误,利用现有技术的调试器,用户可以通过输入一个或多个调试命令并观察随后程序执行的结果来控制有错误软件程序的操作。例如,可以调用一条调试器命令在有错误程序的一个位置设置一个“断点”。断点的作用是当到达断点位置时暂停程序的执行,然后用户可以使调试器显示所选变量的值。当前水平的调试器可以显示断点之前和之后数行反汇编机器码和/或相应的源码。然而,即使当前水平的调试器也无法预测何处和是否会有程序转移。因此,当前水平的调试器的一个缺点是它们所显示的暂停点后的几行代码简单地是程序中随后连续数行的代码。当用户恢复程序操作后这些代码行可能不是将执行的代码。

    典型的调试命令包括:“单步执行命令”,一次执行一行程序,在它们执行时可能同时显示这行代码;“监视值命令”,当程序运行时显示所选变量的变化值;“跟踪命令”,显示栈中一列激活的函数;“数据中断命令”,当发生用户选择的条件如变量达到一个预定值时,停止程序的执;和一条“赋值命令”,把一个用户选择的值赋给变量。

    尽管调试器有广泛的应用,调试仍然是困难和费时的,一个原因是现有技术的调试器是基于文本的,即调试器以一系列文本行的形式向用户提供信息并以相同的格式接受命令。例如,使用现有技术的调试器,用户可输入一个命令使调试器在程序的一个特定行放置一个断点,或者使用鼠标,在一个代码行“点中并敲击”以在这行的开始放置一个断点。断点发生时,现有技术的调试器可以显示包括执行到断点处的反汇编机器码的文本行,相应的一行或多行源代码和一定的所选变量的值。

    基于文本级的调试器的操作有许多缺点,例如,用户须非常熟悉所调试程序的组织结构,因为调示器只能显示包含程序实际经过的执行路径的代码行,调试器不能告诉用户使用不同输入数据集时可能执行哪条可选的执行路径,现有技术的调试器还不能告诉用户位于断点处的函数将调用哪个函数。用户必须通过检查所显示的代码来推导出这些信息,这样,为了完全了解断点处程序的状态,用户必须推断出并记下一个各种执行路径的复杂的想象中的图,这些路径是到达当前状态可能采用的和一旦下一条调试命令使程序恢复执行时可能采用的。

    现有技术调试器的用户常常发现他们自己处于有点象没有路线图的横穿全国的旅行者的状况,为到达每下一个十字路口,必须询问各个方向内最近城镇的名字,没有一张给出位于起始点和到达目的地前的全部道路的路线图,旅行者不可能计划一条最有效的到达最终目的地的路线,仅仅使用试谬法来代替路线图,旅行者可能很容易迷路,可能不得不往回走并且会常常发现自己走到了死胡同。

    尽管调试技术有许多进展,生成一个无错误软件还是一个远未实现的难以捉摸的目标,实际上,软件系统复杂性日益增长的趋势使得达到这一目标更加困难,这样,调试器是影响编程者效率的最重要工具之一。但令人惊奇的是,尽管软件工业已经对调试器作出了相当大的努力,它们的使用仍然很不方便。(发明者认为这个结果来自于这个事实,即现有技术的调试器所基于的模型是用于支持传统的基于字符的终端)。

    由上所述,很明显需要一种改进的调试工具,特别需要这样一种调试工具,这种工具可以从复杂性日益增长的软件中提取关键调试信息,以图形的方式显示信息,另外,允许用户通过直接在程序的图形显示上执行的操作来控制程序的执行。

    本发明提供一种改进的具有图形用户接口的调试器,此调试器最好在一个用户服务器计算环境中操作。

    这个调试器的一部分(此后称为″调试器服务器″)最好在与被调试的程序相同的服务器计算机上执行。调试器服务器接收从客户计算机传送来的调试命令并与服务器的操作系统协同执行这些命令。调试器读取一定的信息,称作“符号表”,它典型地存储于服务器计算机的内存里或一个相关的磁盘存储子系统上。调试器服务器还从计算机的内存中读取程序的状态信息。利用这些符号信息,调试器服务器得出程序内所包含函数的“调用关系”,即哪个函数可能调用哪个其它函数,然后服务器计算机把这些信息和当前程序状态传送给客户计算机。

    调试器的图形用户接口部分最好驻留在客户计算机中。调试器的这部分接收从服务器传送来的调用关系信息和程序状态信息。利用这些信息,用户接口构造并显示一张组成被调试程序的函数图。例如,调试器可以显示程序的树形图形表示,其中构成程序的每个函数表示为图上的一个节点并且函数之间的调用关系由连接节点的线表示,这样一张图称作“调用树”。

    本发明的接口以几种用户选择的方式显示调用树。这棵树用作调试的“路线图”,使得用户可以容易地确定程序在将来可能采用的执行路径的集合。接口还用如用户所选择变量的值的附加信息来注释调用树,高亮度显示由函数调用栈确定的当前执行路径,并且当在函数中设置断点时,以任何便利的方法指示出来。接口还提供可加到由调用树节点表示的函数的调试命令。这些命令包括一次单步执行一个函数的功能,观察与函数相关的源代码的功能,在函数中设置断点的功能,和“展开”与“压缩”调用树节点的功能,这些将在后面进行详细讨论。接口把这些命令传送到服务器计算机执行。

    用户可以在一个相关键盘上通过键入命令以常规方式将命令输入到客户计算机内,然而,根椐本发明的一个重要方面,另一方案是,用户可以通过图形接口简单地用一个鼠标点中并敲击来控制调试器和直接输入调试命令,鼠标首先直接在显示的调用树上命令将执行的节点处敲击然后在例如用于期望调试命令的图标或菜单项的一个图形符号处敲击。。

    本发明图形地表示调试信息并通过图形接口接收调试命令的功能极大地方便了软件调试过程。特别是本发明的调试器的显示调用图功能,在图上指示出最后执行的函数及所有先前执行的函数和所有在程序执行的暂停点可能被调用的函数,这种功能极大提高了用户透彻地容易地理解程序当前状态的能力。

    与前面描述的横穿国家的旅行者类似,本发明相当于提供给旅行者一张在起始点和最终目的地之间所有高速公路和地面街道的完整路线图。这样一张路线图使得旅行者可以确定到达一特定目的地的最佳可能方式。与此类似,本发明提供给编程者同一类型的路线图使得旅行者可以确定调试程序的最佳的、最有效的方式。

    当结合附图对本发明详细描述之后,本发明的这些和其它优点将变得更明显。

    现在将参照附图对本发明进行描述。

    图1是一个用于实现本发明一种最佳实施方式的客户/服务器计算系统的框图。

    图2图示了服务器计算机中栈的存储组织形式。

    图3是一个图示复杂计算机程序文件组织形式的框图。

    图4是表示源代码转换为执行代码的流程图。

    图5是一个图示编译器为被调试的程序生成的符号表文件结构的框图。

    图6是一个由本发明的调试器生成并显示的动态调用树,它图示了一个定单处理程序调试前的可能执行路径。

    图7a和图7b是根据本发明的一种最佳实施方式的流程图。

    图8是一个由本发明的调试器生成并显示的动态调用树,它图示了例示的定单处理程序的状态,其中函数“Main”调用了函数“Get Order”,后者接下来调用函数″Verify Order”,当同图6比较时,“Verify Order”节点可以展开,以显示它的子节点(函数)。

    图9是一个由本发明的调试器生成并显示的动态调用树,它图示了和图8相同的程序状态,但是另外,这张图表示Verify Order节点被选中并且用户发出一条命令来显示构成Verify Order函数的源代码。

    图10是一个由本发明的调试器产生的显示程序组织形式的无环调用树。

    图11是一个显示与图8所示相同程序的组织形式的有环调用树。

    下面的描述是目前实现本发明最成熟的模式。这些描述是为了表示本发明的一般原理而不是作为一种限制。

    如图1所示,本发明的调试器设计为最好用于一个客户/服务器计算环境100。服务器计算机102通过总线或I/O通道104与一个相关盘存储子系统106通信。服务器计算机102包括一个CPU108和用于存储有关程序执行的状态信息的RAM 110。RAM110的一部分用于存储寄存器状态和与当前正在服务器计算机102上运行程序的各个函数相关的局部变量。RAM的这部分一般称作一个“程序栈”或简称为“栈”202(图2)。如图2所示,RAM单元与附属于每个这种函数的信息有关,以称作“帧”的数据结构200的形式加以组织。

    客户计算机112(图1)类似地包括RAM 114,相关盘存储器116,一个键盘118,一个鼠标120和一个视频显示终端(VDT)112。客户机CPU 123通过总线或I/O通道124与盘存储子系统116通信,通过I/O通道126与键盘118,VDT 112和鼠标120通信。

    按照最佳的客户/服务器模型,最佳地设计了本调试器软件的各部分以同时在客户112和服务器102计算机上操作。调试器软件的两部分所执行的操作之间的协调由通过一个网络128的通信来维持。

    如下面将更详细的描述,今天的大部分软件程序用称作第三代高级语言的语言书写,这种语言由编译器翻译成机器指令。用第三代语言书写的程序以函数(也称作过程或子程序)的形式来组织。函数定义为执行特定的处理任务。它们由一行或多行源代码组成并可以带有它们自己的局部变量,这些变量包含此函数独有的状态信息,函数可以调用其它函数来执行特定任务。当这种情况发生时,执行转到被调用的函数并且当被调用的函数完成要求的任务后又返回调用函数。

    程序的执行状态保存在一个“调用栈”中,它位于计算机内存中,记录被调用的各个函数的当前执行位置。当一个函数被调用时,调用函数的当前执行位置记录在栈中。当被调用的函数完成后,从栈中删除这个位置并在调用函数中所记录的位置处恢复执行。

    众所周知,在编程技术中,程序从主程序开始执行,作为主程序的过程调用其它程序完成各种处理任务,这些其它被调用的程序可以依次调用其它附加的程序。程序在任意特定时刻的执行状态由程序调用栈来表示。

    如图3所示,一个被调试的典型程序,如一个定单处理程序,可以由几个源代码程序构成:(a)Main 300;(b)Input 302;(c)Pro-cessing 304;和(d)Output 306。各个源代码文件300,302,304,306由几个函数308构成,每个函数308典型地包含多行源代码310,并且在完成它的任务或一特定事件发生时,每个函数将或者开始(或调用)另一函数308的操作,或返回调用它的函数308,由后者执行。

    这个定单处理程序在计算机102上运行之前,它的源代码文件300,302,304,306必须经过编译。编译过程把人可读的源代码310转化为二进制代码,称作“目标代码”。许多商业化的编译器可以和本发明联合使用。例如,可以使用加利福尼亚,Cupertino的Tandem计算机公司的Tandem C编译器。这个编译器生成公用目标文件格式(″COFF″)的目标文件。许多UNIX编译器也生成COFF文件。任何特殊编译器的使用对于本发明是不重要的,只要这个编译器产生这里所描述的本发明调试器所用的必要信息。

    如图4所示,编译器410把各个源代码文件300,302,304,306转化为目标代码文件400,402,404,406。除了把源代码翻译成二进制计算机指令,用户还可以令编译器410在每个目标代码文件400,402,404,406中包含一定量的附加信息,称作“符号信息”。这些符号信息包括,例如,变量名,函数名,变量地址和在目标文件中所有一个函数调用另一函数的位置表。对于本发明的操作,特别有意义的是符号信息中调试器可以确定不同函数308之间的层次调用关系,即哪些函数308可调用哪些其它函数308的那部分。符号信息典型地构成了存储在计算机内存110中的目标文件400,402,404,406的一部分。但是可选择地,符号信息可以存储于位于盘存储子系统106上的一个独立文件中。如下面将进行解释那样,符号信息主要用在可执行程序的调试中。

    图5图示了两个典型目标代码文件500,502的结构。每个文件的头段504包含指向文件各个段开始位置的指针,例如,头段包含对于组装表的文件偏移,每个文件的静态数据段506包含程序所使用的全部常量。每个文件的指令代码段508包含执行程序用的实际二进制代码指令。每个文件的函数入口点表510包含位于相关文件中的函数表和各个函数的地址。组装表512是每个相关文件中一个函数308调用另一个函数308的地址的表。每个未分解外部参考表514包含一个所有在这个文件中引用而在其它地方定义的函数308的表。

    所有目标代码文件最终提供给一个链接器412(图4)。链接器412是一个软件程序,它把不同的目标文件400,402,402,406合并或者链接成一个可被计算机102执行的程序414,链接器412的一个重要功能是读取各个目标代码文件400,402,404,406的函数入口点表510,组装表512和未分解参考表514,共同包含于这三个表中的信息足以使链接器412生成一个可执行代码文件414,它具有如图5中所示的相同数据结构和初始位于构成此程序的所有目标代码文件400,402,404,406中的不同函数之间的所有必要的参考或逻辑连接516(图5)。

    尽管本发明不要求使用根据COFF标准产生目标代码文件的编译器,但假如使用了这样一个编译器,就可使用Tanden计算机公司的本地链接器/装载器来链接目标代码文件。另一方案也可使用任何能处理其它目标文件格式的链接器。而且,如这里所述,只要给本发明调试器的运行提供必要的信息,使用任何特定的链接器或任何特别的文件格式对本发明都是无关紧要的。

    在程序执行过程中,服务器计算机102在其内存110中保持信息,称作“状态信息”。顾名思义,状态信息是重建CPU 108的当前状态所需的所有信息。状态信息包括栈202(图2)。在通常情况下,此信息作为帧200的链接204表存于主存110中。从技术上可知,栈指针指示计算机102当前所执行的链接表中的函数。

    调试器服务器读取服务计算机存储器110中或盘106上所存的符号信息。由先前所述将很清楚,通过读取链接器410为参考516向516其它目标代码文件和组装表中函数所补充的函数入口点表510,调试器能获得所有必要的信息以建立示例定单处理应用程序(或任何其它正在调试的程序)的完全调用图。或者,在下列特殊情况下,即调试器在COFF文件上运行而COFF标准未包含组装表时,可通过搜索所有在一个函数调用另一个函数的地址处的机器指令代码来简单地将调试器编程出综合的组装表信息。

    图6图示了这样一个用于例示定单处理程序的调用图。图中十二个节点600中的每一个节点代表全部程序中所包含的某个特定函数。连接节点600的线602表明最左边的函数可调用靠右边的函数。例如,如图中所示,主程序函数可以开始调用获得定单,更新数据库,打印发票等函数(节点)。接着,每个这样的函数660调用辅助的函数以执行在计算机终端上绘制视觉显示,读取用户输入等物理步骤。

    调试器服务器还从服务器计算机102的存储器110中的目标程序地址空间中读取栈信息并确定栈的202的状态。根据前面的讨论,熟练的技术人员将会知道:计算机一般专门具有一个栈指针寄存器,或使用一个通用寄存器作为栈指针。本发明的调试器使用栈指针寻找第一个栈帧200。由于所有的栈帧是链接的204,调试器就能很容易地找到其余的帧。读取符号信息后,如上所述得出建立调用图所必要的信息并获得栈信息,然后服务器将调用图和栈信息传送给客户计算机112。

    本发明的最佳实施方式中包含驻留于客户计算机112中的图形接口软件。图形接口软件在VDT 122上显示调试信息并接收来自用户的调试命令,命令或通过键盘118或由鼠标输入,鼠标以众所周知的方式在VDT118上操作可移动光标或指示符606(图6)。

    图形接口软件最好包含现成的图形软件包作为它的一部分,例如:Microsoft Windows,可从华盛顿Redmond的微软公司获取,或zApp Application Framework,可从加利福尼亚Mountain View的Inmark开发公司获取。也可使用如这里所述的能建立图形并完成用户交互操作的类似的商用图形软件包。

    使用已建立的算法,如发表在“Methodsfor Visual Understand-ing of Hierarchial Systems Structures”,Kozo Sugiyama,ShojiroTagawa和Mitsuhiko Toda所著和IEEE Transactions On Sys-tems,Man andCybenetics杂志,SMC—11卷,第2期,1981年9月,第109—125页;论文:Michael B.Davis著,“A Layout Algorithmfor A Graph Browser”,U.C.Berkeley Engineering Library;或“ABrowser for Directed Graphs”,Lawrence W.Rowe,MichaelDavis,Carl Meyer,Charles Spirakis和Alan Tuan著,U.C.Berke-lev Engineering Library中的“Sugiyama算法”,和从服务器传送来的调用图信息,客户在VDT 122上构造调用图的视觉表现。使用从服务器传送来的栈信息,客户高亮度显示特定的区域以指示程序的执行路径。

    上面标出的每个参考文献这里作为非重要问题的形式加以引用;在本发明的调试器中也可用其它已知的图算法代替Sugiyama算法或对该算法的Davis改进。

    调试器根据图7a和7b中所示的处理步骤运行。从这些图中可看出,被调试的程序可在调试程序700的控制下启动,或由操作系统启动,操作系统随后调用调试器702。两种情况下,应用程序都被装入服务器计算机的内存110并在调试器服务器的控制下运行。然后调试器从服务器计算机的内存110或相关的盘子系统106中读取符号信息,得出各个函数706之间的调用图关系,并从服务器内存708中读取帧信息和指针信息。然后服务器通过网络128将此信息传送给调试器客户710。

    根据从服务器传给客户的信息,驻留于客户计算机112中的图形接口软件使用Sugiyama算法的Davis改进,构造712,714并显示716正被调试的程序的调用图。由于帧栈信息也传送给了客户,调试器确定并在调用图上高亮度显示程序的执行路径。图6说明了调试器开始程序执行之前所表现的调用图。注意,在图中只有“MAIN”是高亮度显示的,从而表明程序已经准备执行。

    用户利用鼠标120输入调试命令718。例如,图形接口软件可设计成使用“点中并拖动”和/或“点中并敲击”方法来接收命令。根据点中并拖动方法,表示不同调试命令的多个符号,例如,如图6中604处所示,可以作为调试命令工具条显示在VDT屏幕122的顶部。通过操纵鼠标120移动显示在VDT屏幕122上的光标或指示符606,直至指到调用图上要执行的调试命令位置处,用户选定一个目标及在该目标上操作的命令。然后用户按下鼠标上的键,移动鼠标120,直至指示符606指到命令工具条604上显示代表所需调试命令的图标位置处并释放键。“点中并敲击”方法类似,不同之处是鼠标120上的键是在当指示符606指到调用图上要执行的命令位置处时按下并释放。然后指示符606沿工具条604移动到所需调试命令图标所在的位置处,再次按下并释放鼠标120。用于向通用计算机输入命令的这两种方法在技术上都是众所周知的。

    在这两种情况下,客户随后都向调试器传送调试命令,从而使定单处理程序根据该命令并在调试器的控制下执行。例如,参照图8,若调试命令是在Verify Order 808处的断点入口,程序将执行直至该断点。当到达断点时,调试器的服务器部分读取帧信息并将程序的当前状态传送给客户。当客户接收到此信息时,通过高亮度显示程序经过的直至Verify Order函数808断点处的执行路径而改变显示。图8给出了调试过程中在这样一个中间步骤处的图形用户接口显示。注意,通过在所显示的调用图上高亮度显示执行路径,本发明以易于理解的图形显示方式不仅给用户提供了当允许程序继续运行时程序可能走的一些可选路径,而且提供了程序已走过的执行路径。如前所述,所选变量800在遇到断点时的值也可以显示出来。

    若用户从所显示的信息中找到了故障点,用户就可在源程序中修改错误,重新编译,重新链接并重启程序。不然,若未找出故障点,则用户就可输入另一个调试命令。此过程继续并且在图形显示上给出程序的相继状态(如需要,还包括所选的变量,源代码和反汇编机器码)直至所有的故障点都找到和改正并且程序以正常的方式执行。

    在调试过程中,程序员可能想将他的或她的精力集中于程序的某个特定区域。通过允许调用树的中间节点“压缩”(如图6所示)或“展开”(如图8所示),本发明允许程序员隐藏或显示必要的程序细节。要允许这样一种控制,每个有子节点的节点具有一个图标键,其功能如同一个开关。当节点压缩时,不显示子功能节点。当展开时,显示子功能节点。通过允许程序员控制显示细节的级别,调试器提供了对用户必须要处理的可视复杂度进行控制的能力。

    图9图示了一显示窗口900,其中显示了与Verufy Order函数908相应的源代码。可额外显示或作为替代显示反汇编机器代码(未显示)。可通过使用与上面所讨论相同的“点中并拖动”或“点中并敲击”方法发出命令来得到源码显示900(或,作为替代的反汇编机器代码显示)。在图9所说明的特定情况下,用户首先点中并敲击Veify Order节点908,然后沿着调试命令工具条在视图菜单902下的源代码视图菜单项上点中并敲击。这样,根据前面的描述将很明显,本发明提供了一种极其简便的方法来寻找并显示与函数相应的代码行,并/或发出调试命令,例如在某函数处的断点,而不必去浏览源代码以查找目标函数的第一行。

    在调用图的视图中,本发明的调试者具有以两种模式显示调用图的能力,我们称这两种模式为“无环的”(图10)和“有环的”(图11)。当有迭代函数调用时,在调用图中就出现一个环。当一个函数调用其自身或另外一个在程序栈202中激活的函数时就有迭代调用存在。实质上我们得到一个循环。这两种模式,有环和无环,具有不同的优点。图10说明了以自顶向下方式表现在VDT屏幕上的调用图1000的无环表示的通常情况,其中程序的最顶部函数(main)1002处于最顶部,并且随后的子函数在窗口中向右缩进并位于窗口较低处。无环表示的优点在于它视觉清楚,这是由于调试程序在所有引用函数的地方复制函数节点因而没有相互交叉的线出现。例如,若函数MAIN调用函数B,I和J,并且B调用函数I和M,I将在无环视图中表示两次。在某些情况下这种表示的可能缺点是丢失了有多少函数调用了某个特定函数的信息。在图10的例子中,很容易看出I被MAIN和B调用,但在更复杂的调用图中将很难用肉眼提取出此信息。

    图11是与图10所示相同的调用图1000的有环表示。这里,不必试图复制节点,但程序结构的表现更复杂。要显示调用图的有环表示,图以从左到右的方式布局,其中MAIN函数1002在最左边并且经过子节点的展开出现在右边。由于每个函数只有一个实例,被调试者必须显示出走进或走出该特定节点的单一表示的所有连接。

    对有许多迭代调用的大程序,调用图的有环表示可能变得非常复杂。这就是本发明提供给用户选择使用这两种模式之一的原因,这使得用户能以最易理解的格式观察必要的信息。

    从上面详细的描述可以看出,本发明极大地简化了调试。它对调试复杂程序特别有用,因为显示的图形特征将程序的组织以一种现有基于文本技术的调试器所不能实现的方式展现给用户。使用本发明,可以显示程序的整个调用图(或调用图中所选定的部分),从而以简明的显示提供给用户:(a)关于程序总体组织形式的信息;(b)程序的当前执行状态;(c)程序到达其当前状态所经过的执行路径;(d)程序本可能经过的替代的路径;和(e)当程序允许继续执行时程序可采用的可选的执行路径。很明显,已有基于文本的调试器不能以简明、动态的显示向用户提供这样的信息。这五项,以简明的图形格式显示在一个单一的屏幕上的信息加上通过在程序的图形表现上直接操作来输入调试命令的功能,极大地简化了调试进程。

    现已描述了本发明的几种最佳实施方式。无论如何,可以理解可做出各种修改而不背离本发明的实质与范畴。例如,根据本发明的调试器可在单一的计算机上运行,而不是所推荐的客户—服务器环境。同时执行路径最好沿调用图以加粗或高亮度视频显示,其中程序函数表示为节点并且连接节点的线说明了一个函数有调用另一个函数的能力,根据本公开摘要,多种其它图形化表达程序组织形式和执行路径信息的方法对普通的技术人员将很明显。这样,本发明不仅仅受限于这里所述的最佳实施方式,而是可以变换为各种对熟练的技术人员很明显的方法。

    在描述最佳实施方式时,用于实现本发明的不同方面的实施方式的几种特别技术被标出,并涉及到更多描述本发明的普通术语。然而,应该理解这种特殊性不会限制本权利要求发明的范畴。

计算机程序中错误的诊断和改正工具及方法.pdf_第1页
第1页 / 共34页
计算机程序中错误的诊断和改正工具及方法.pdf_第2页
第2页 / 共34页
计算机程序中错误的诊断和改正工具及方法.pdf_第3页
第3页 / 共34页
点击查看更多>>
资源描述

《计算机程序中错误的诊断和改正工具及方法.pdf》由会员分享,可在线阅读,更多相关《计算机程序中错误的诊断和改正工具及方法.pdf(34页珍藏版)》请在专利查询网上搜索。

这里公开了一种用于在计算机系统中调试复杂计算机程序的改进的工具和方法。该工具从计算机的内存和/或远程存储器中提取出关键的调试信息并使用此信息图形化地描述出作为调试操作对象的程序的各组成函数间的调用关系。该工具利用用户通过图形用户接口直接在程序函数的图形表示上所执行的操作来接受调试命令。该工具通过图形用户接口接受用户命令并使用此相同的接口显示关键的调试信息的功能极大地方便了程序的调试。 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1