用于程序调试中的变量跟踪的方法和系统的制作方法

文档序号:9921952阅读:1276来源:国知局
用于程序调试中的变量跟踪的方法和系统的制作方法
【技术领域】
[0001]本发明的实施例总体上涉及程序开发领域,并且特别涉及用于程序调试中的变量跟踪的方法和装置。
【背景技术】
[0002]在程序开发过程中,程序员需要对所编制的程序进行调试(debugging),以发现程序源代码中的语法和/或逻辑错误。调试器(debugger)是用于执行调试的常见工具。例如,在集成开发环境(IDE)中通常提供专门的调试器。在调试过程中经常需要执行变量跟踪(variable tracking)。
[0003]具体而言,在调试过程中,程序员往往需要确认给定变量的值是否处在合理范围内。目前,可以使用监测点(watch point)来跟踪变量的值。以C或者C++语言为例,程序员可以使用assert之类的语句使程序的运行中止于指定位置。继而,调试器可以获取分配给待检查变量的存储地址中实际存储的值,以供用户查看。监测点实质上是一种内存断点。这样,程序员可以查看变量的值以及其他相关信息。
[0004]然而,在这种传统解决方案中,为了跟踪变量值的变化,程序员必须针对程序中所有可能改变变量值的赋值表达式而设置监测点。而且,可能影响变量值的赋值表达式通常作用于不同变量和/或位于不同的函数中。这不仅增加了程序员的负担,而且不利于变量跟踪过程的自动化。而且,在找到导致变量值的异常改变的根源之前,程序的执行可能被多次中断。

【发明内容】

[0005]总体上,本发明的实施例提出一种用于程序调试中的变量跟踪的技术方案。
[0006]在本发明的一个方面,提供一种用于程序调试中的变量跟踪的方法。所述方法包括:确定待跟踪的第一变量以及与所述第一变量相关联的待监测的第一表达式;对所调试的程序代码执行逆向扫描以搜索对所述第一变量进行赋值的赋值表达式;以及响应于找到所述赋值表达式,在包含所述赋值表达式的赋值语句之后,设置与所述第一表达式相关联的监测点以便检查所述第一表达式是否成立。
[0007]在另一方面,提供一种用于程序调试中的变量跟踪的系统。所述系统包括:目标确定单元,被配置为确定待跟踪的第一变量以及与所述第一变量相关联的待监测的第一表达式;扫描单元,被配置为对所调试的程序代码执行逆向扫描以搜索对所述第一变量进行赋值的赋值表达式;以及监测点设置单元,被配置为响应于找到所述赋值表达式,在包含所述赋值表达式的赋值语句之后,设置与所述第一表达式相关联的监测点以便检查所述第一表达式是否成立。
[0008]根据本发明的实施例,调试器能够自动地添加监测点,从而以有效且高效的方式发现导致变量值异常的根源。本发明的其他特征和优点将通过下文描述而变得容易理解。
【附图说明】
[0009]通过结合附图对本发明示例性实施方式进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显其中:
[0010]图1示出了适于用来实现本发明实施例的示例性计算机系统/服务器的示意性框图;
[0011]图2示出了包含待跟踪变量的程序代码片段的示意图;
[0012]图3示出了根据本发明实施例的用于程序调试中的变量跟踪的方法的示意性流程图;
[0013]图4示出了根据本发明实施例的用于程序调试中的变量跟踪的方法的示意性流程图;
[0014]图5示出了利用根据本发明的实施例进行处理的程序代码片段的示意图;
[0015]图6示出了包含循环结构的程序代码片段的示意图;以及
[0016]图7示出了根据本发明实施例的用于程序调试中的变量跟踪的系统的示意性框图。
[0017]在附图中,相同或相似的标号被用来表示相同或相似的元素。
【具体实施方式】
[0018]下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0019]图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的方框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0020]如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0021]总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
[0022]计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0023]系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM) 30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如⑶-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
[0024]具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括-但不限于-操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
[0025]计算机系统/服务器12也可以与一个或多个外部设备14 (例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口 22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
[0026]下面将详细描述本发明实施例的机制和原理。除非特别声明,在下文和权利要求中使用的术语“基于”表示“至少部分地基于”。术语“包括,,表示开放性包括,即“包括但不限于”。术语“多个”表示“两个或更多”。术语“一个实施例”表示“至少一个实施例”。术语“另一实施例,,表示“至少一个另外的实施例”。其他术语的定义将在下文描述中给出。
[0027]此外,在此使用的“第一”、“第二”等术语仅仅是为了区分所指代的对象,并未意在施加顺序、时间、空间或者任何其他方面的限制。例如,代码中的“第一表达式”并非必须是代码中的首个表达式,也未必位于“第二表达式”之前。而且,除非特别声明,这样的术语并非一定指代不同的对象。例如,“第一表达式”和“第二表达式”可以是不同的表达式,也可以是相同的表达式。
[0028]为了更清楚地阐释本发明的机制和原理,下面将首先描述在传统方案中如何实现对变量的跟踪。参见图2,以C++语言编写的程序代码片段200包含函数p0lice_chaSe210、sentence 220 和 find_suspect 230。函数 sentence 以两个整型(int)变量 guy 和 year为参数。在函数police_chase 210中,以整型变量suspect为参数调用函数sentence 220。
[0029]在函数sentence 220中,在语句225处设置监测点以便检查变量guy的值大于或者等于O
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1