一种计算机程序的调试方法

文档序号:6575333阅读:151来源:国知局
专利名称:一种计算机程序的调试方法
技术领域
本发明属于计算机软件开发技术领域,尤其涉及一种计算机程序的调试 方法。
背景技术
程序调试是计算机软件开发的重要环节之一,其目的是发现程序代码中 存在的各种问题,提高程序运行的正确性、安全性、可靠性。传统的程序调
试方法采用断点设置与代码跟踪技术,如VC+十、Borland C十+等。对于直接 编译型语言(如C/C++, Java等),编写的是直接执行的程序,由于程序的 执行流程比较单一,这种方法是比较有效的。然而,对于一些执行过程复杂 多变、具有不确定性的程序,同一段代码在不同系统运行条件下可能正常也 可能出现故障,仅仅发现故障代码的位置常常不能准确定位故障产生的原因。 采用代码跟踪的方法既繁琐又费时,特别是当程序在同一段代码上执行了大 量流程后产生故障,断点追踪的方法几乎是无法定位故障的。因此,采用快 速有效的故障定位技术,对于提高复杂过程计算机程序的调试效率和改进代 码质量具有十分重要的意义。

发明内容
本发明的目的在于,提供一种计算机程序的调试方法,用于解决复杂运行 流程的计算机程序无法快速准确定位故障的问题。
本发明的技术方案是, 一种计算机程序的调试方法,其特征是所述方法包括下列步骤
步骤1:建立在计算机程序所有运行流程中均可使用的记录流程信息的数 据结构;
歩骤2:被调试的计算机程序运行,判断是否产生故障,如果是,则记录 故障代码位置并执行步骤3;否则,执行步骤9;
步骤3:在故障代码前面,加入用于添加流程信息的代码,通过添加流程 信息的代码,刷新数据结构中记录的流程信息;
步骤4:在故障代码处,加入用于监控流程信息的代码,通过监控流程信 息的代码,获取特定的流程信息;
步骤5:重新运行被调试的计算机程序,当被调试的计算机程序再次在故 障代码处终止时,获取监控流程信息;
步骤6:根据监控流程信息,在故障代码处的前面插入流程信息的追踪代
码;
歩骤7:再次运行被调试的计算机程序,使被调试的计算机程序在发生故 障时,暂停于故障代码前的追踪代码处;
步骤8:从追踪代码开始,采用常用的步进方式,继续执行被调试的计算 机程序,确定故障原因并作相应修改;之后,返回步骤2;
步骤9:在修改之后,删除用于监控流程信息的监控代码。
所述数据结构为全局性数据结构。
所述数据结构独立于所述计算机程序。
所述数据结构记录的流程信息包括递规算法的层次计数、条件表达式计 数、任务计数、任务分解方法计数、动作计数、计划计数。
所述数据结构记录的流程信息可以根据被调试的计算机程序进行扩展。 所述特定的流程信息根据被调试的计算机程序预先设定。 本发明能够快速准确的定位故障代码和发生故障时的运行流程,方便地确定程序运行故障的产生原因,提高代码修改的质量和效率。


图1是流程信息数据结构与被调试计算机程序的关系图; 图2是流程信息的数据结构示意图; 图3是智能规划软件系统的原理图; 图4是HTN搜索的流程树结构;
图5是本发明实施例提供的计算机程序的调试方法流程图。
具体实施例方式
下面结合附图,对优选实施例作详细说明。应该强调的是,下述说明仅 仅是示例性的,而不是为了限制本发明的范围及其应用。
木发明以层次任务网(Hierarchical Task Network,简称HTN)智能规划器
程序的调试为实施例对本发明作进-'歩说明。
智能规划问题(Artificial Intelligent planning)是人工智能研究的重要问题 之一(参考文献宋经#7, J^達^, /转一乎,^^,^^^fi 综述一一个源^7应 y^游裸身,,H賓一统,^见^^7, 2 O),其目的是根据给定的初始世界状 态(initial world state)和给定的目标状态(goal state)或目标任务(goal task), 根据预先定义的动作集合求取实现目标的动作序列,这个求得的动作序列就形 成一个计划(plan)。 HTN规划是一种面向工程应用提出的实用智能规划技术, 通过任务的逐层分解实现计划的生成,能够极大地改善规划器求解性能。HTN 智能规划算法的程序编写和执行与传统的程序编写的一个重要不同是传统的 编程方法编写的程序其执行的流程是预先设计好的,流程分支的数量不太多、 容易预见,传统的断点追踪技术比较容易控制。而HTN规划算法在运行时受 规划域(即一种驱动模型)中不确定的任务分解方法(method)和问题实例(problem instance)的影响,求解流程存在许多不确定的分支,尤其是当问题
规模比较大时,求解流程分支的不确定性变化数量非常庞大。当算法执行出现
异常时,用传统的设置断点和跟踪代码执行情况的调试方法判断故障原因是十
分困难的。采用本发明提出的调试方法能有效地进行这类系统的开发调试。
图1是流程信息数据结构与被调试计算机程序的关系图。记录运行流程
信息的数据结构独立于被调试计算机程序单独构建。该数据结构通过在被调 试的计算机程序中加入的用于添加流程信息的代码段不断刷新,记录流程的
相关信息。流程信息监控代码段则获取特定的流程信息,为流程的追踪提供 断点信息。所述特定的流程信息根据被调试的计算机程序预先设定。
图2是流程信息的数据结构示意图。图2中,记录流程信息的数据结构 包括与流程相关的记录信息项,如递规算法的层次计数、条件表达式计数、 任务计数、任务分解方法计数、动作计数、计划计数等。所述数据结构记录 的复杂流程信息可以根据被调试的计算机程序的不同,对记录信息项进行修 改和扩充。
图3是智能规划软件系统的原理图。图3中,通用型HTN规划系统的 基本结构包括由某种智能规划语言形成的规划域和规划问题的文本文件、世 界状态描述、HTN规划器、计划。规划域和规划问题的文本文件包括初始世 界状态的描述、规划域描述、规划目标任务描述。规划域包括操作(operator)、 任务分解方法(method)、公理(axiom)等规划域知识的描述。HTN规划系 统从文本文件的初始世界状态中装入世界状态描述,规划器从文本文件中装 入规划域和目标仟务描述。经过顺序任务分解算法的递规处理,世界状态被 不断刷新,最终生成的动作序列从规划器输出形成计划。规划域模型和问题 实例采用SHOP2语言建立(参见文献A^w/)., "a/, Z^ cwwe"to"o"/w 57/(9户2, /2"戸.'〃sowre/wge.""/; ra/ecto/^o; )。通用型HTN规划系统通过装入规划与 模型和问题实例形成针对某一应用的专用型规划系统。顺序任务分解算法是近年来提出的高效、通用型HTN规划算法(参见文 献A^flM D., v4m L * //77V尸/a朋z'"gJ"cwma/ 。/爿Wzy c/a/
/"te〃&e"ce/ ew"rc/z, 20(200",/ p,379-4似),该算》去是一个递规算法。由于装 入的SHOP2域模型的不同以及同一域模型针对的问题实例的不同,顺序任 务分解算法中同一段代码的执行流程存在极大的不确定性。
图4是HTN搜索的流程树结构。图4中,顺序任务分解的程序执行流程可 以描述为自左向右、自上向下的树形遍历过程。不同的初始世界状态、不同的 规划域和不同的目标任务将产生不同的流程树。故障的产生位置也因问题实例 的不同而发生变化。
在。++语言中,记录复杂流程信息的数据结构以"类"形式定义为CPR, 即Complex Process Record,该类被定义为静态类(static),以便应用于被调试 代码的各部分并保持信息的一致性。
图5是本发明实施例提供的计算机程序的调试方法流程图。图5中,以 不确定性递规过程的调试为例,在¥。++6.0的源码调试环境下,本发明的实 施过程如下
步骤101:建立在计算机程序所有运行流程中均可使用的记录流程信息 的数据结构。
步骤102:被调试的计算机程序是否因故障而停止,如果是,记录故障 代码位置并执行步骤103;否则,执行步骤109。
步骤103:在故障代码处,加入用于添加流程信息的代码,通过该代码刷
新数据结构中记录的流程信息。在本实施例中是这样操作的,在递规函数内的
首行加入语句CPR:: ri++,记录递规层的增加;在递规调用语句的下一行,加 入语句CPR:: ri-,记录递规层的减少。
步骤104:在故障代码处,加入用于监控流程信息的代码,通过该代码获
取特定的流程信息,特定的流程信息根据被调试的计算机程序预先设定。在本市实例中,在故障代码前加入下列语句intri=CPR:: ri,用以获取CPR:: ri的值。
步骤105:重新运行被调试的计算机程序,当被调试的计算机程序再次在 故障代码处终止时,获取监控流程信息。在本实施例中,即观察CRP:: ri的值,
假设观察到的值为968。
步骤106:根据监控流程信息,在故障代码处的前面插入追踪代码。在本 实施例中,在步骤104插入的代码与故障代码之间加入下列两行语句
第l行if (ri=968)
第2行intstop = 0;(该行无特定的意义,仅用于调试断点设置) 并将调试断点设在第2行。
步骤107:再次运行被调试的计算机程序,使被调试的计算机程序在ri的 值为968时暂停。
步骤108:采用常用的步进方式,继续执行程序并观察相关变量的值,确
定故障原因并作相应修改;之后,返回步骤102。
步骤109:在修改之后,删除用于监控流程信息的监控代码。 本发明提供的-种计算机程序的调试方法,对复杂过程的描述信息进行
了集中管理,使用简单、方便,可适用于软件的不同代码段和多种软件程序。
同时,该方法能够快速准确的定位故障代码和发生故障时的运行流程,方便 地确定程序运行故障的产生原因,提高代码修改的质量和效率。最后,该方 法在模型驱动的软件系统中,能够帮助发现建模机制和模型设计中的缺陷, 提高模型构建的质量和效率。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不 局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可 轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明 的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种计算机程序的调试方法,其特征是所述方法包括下列步骤步骤1建立在计算机程序所有运行流程中均可使用的记录流程信息的数据结构;步骤2被调试的计算机程序运行,判断是否产生故障,如果是,则记录故障代码位置并执行步骤3;否则,执行步骤9;步骤3在故障代码前面,加入用于添加流程信息的代码,通过添加流程信息的代码,刷新数据结构中记录的流程信息;步骤4在故障代码处,加入用于监控流程信息的代码,通过监控流程信息的代码,获取特定的流程信息;步骤5重新运行被调试的计算机程序,当被调试的计算机程序再次在故障代码处终止时,获取监控流程信息;步骤6根据监控流程信息,在故障代码处的前面插入流程信息的追踪代码;步骤7再次运行被调试的计算机程序,使被调试的计算机程序在发生故障时,暂停于故障代码前的追踪代码处;步骤8从追踪代码处开始,采用常用的步进方式,继续执行被调试的计算机程序,确定故障原因并作相应修改;之后,返回步骤2;步骤9在修改之后,删除用于监控流程信息的监控代码。
2. 根据权利要求1所述的一种计算机程序的调试方法,其特征是所述数据结构为全局性数据结构。
3. 根据权利要求1所述的一种计算机程序的调试方法,其特征是所述数据结构独立于所述计算机程序。
4. 根据权利要求1所述的一种计算机程序的调试方法,其特征是所述数据结构记录的流程信息包括递规算法的层次计数、条件表达式计数、任务计数、任 务分解方法计数、动作计数、计划计数。
5. 根据权利要求1所述的一种计算机程序的调试方法,其特征是所述数据结 构记录的流程信息可以根据被调试的计算机程序进行扩展。
6. 根据权利要求1所述的一种计算机程序的调试方法,其特征是所述特定的 流程信息根据被调试的计算机程序预先设定。
全文摘要
本发明公开了计算机软件开发技术领域中的一种计算机程序的调试方法。包括建立一个在被调试的计算机程序所有运行流程中均可使用的记录运行流程信息的全局性数据结构;当程序在源码级调试环境下运行并产生故障终止时,在终止代码附近加入添加流程信息的代码和监控流程信息的代码;当程序再次在故障代码处终止时,在程序故障代码段前的适当位置插入流程追踪代码,使程序在运行流程发生故障前的适当位置暂停,然后采用常用的步进方法向故障代码逐渐靠近,最终确定故障原因并作相应修改;当代码修改后,删去监控流程信息的代码。本发明能够快速准确的定位故障代码和发生故障时的运行流程,方便地确定程序运行故障的产生原因。
文档编号G06F11/36GK101615158SQ20091009081
公开日2009年12月30日 申请日期2009年8月10日 优先权日2009年8月10日
发明者宋泾舸 申请人:北京交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1