专利名称:软件Bug追踪方法及其计算机系统的制作方法
技术领域:
本发明涉及一种软件Bug追踪方法及其计算机系统,尤其涉及一种当软件运行中 发生崩溃时的Bug追踪方法及其计算机系统。
背景技术:
在软件开发与维护的过程中,经常会出现软件Bug, Bug—词的原意是"臭虫"或 "虫子"。这里是指电脑系统或程序中隐藏的一些未被发现的缺陷或问题。在各种类型的Bug 中,有的不会对软件造成危害,有的却直接会让软件崩溃,给用户带来无法估量的损失。所 述软件崩溃是指软件运行过程中,由于软件的程序错误导致该软件无法正常工作、非正常 的退出等状况。虽然可以通过严格的、有组织的软件测试尽可能的保证最终交付的软件产 品的稳定性,但依然无法避免Bug的出现。 因此,在软件运行发生崩溃之后,在最短的时间内找出Bug的问题所在并修复,快 速恢复软件,使其正常工作,能够极大的减少由于软件崩溃所带来的损失。传统做法中最普 遍的方式是采用日志形式,即对程序本身的处理状况进行记录,将获取的软件Bug信息及 文字信息进行记录,生成日志文件。这样维护人员可通过日志文件中记录的信息进行查看, 从而找到问题所在。这种方式在很大程度上提升了解决Bug的速度,然而,传统日志的操作 方式有以下缺点1.传统日志依赖程序开发人员的编码传统日志中所具备的记录Bug原
因与位置的功能,依靠的是程序开发人员在可能出现Bug的地方进行异常捕获,从根本上
来说,程序开发人员对程序运行的理解直接关系到日志记录的准确与否。要达到准确的捕
获Bug,需要开发过程中写入大量的代码,且需要程序维护人员具备完善的异常处理经验。
2.无法记录软件运行中发生崩溃的原因这一点是传统日志的最大缺陷,它只记录程序或
框架所定义的错误。但对于已经投入的大型软件来说,若由于程序错误导致该软件运行中
发生崩溃,往往只弹出类似0x0040104a的内存地址,之后直接退出正在运行的软件,记录 类似于"严重系统错误关闭"等信息,而对于出现崩溃的Bug原因却无法获取,使得用户无 法通过日志了解发生崩溃的原因。
发明内容
鉴于以上内容,有必要提供一种软件Bug追踪的计算机系统,其能够准确记录软 件运行中导致该软件发生崩溃时的原因,提高了软件维护的效率。 鉴于以上内容,还有必要提供一种软件Bug追踪方法,其能够准确记录软件运行 中导致该软件发生崩溃时的原因,提高了软件维护的效率。 —种软件Bug追踪的计算机系统,该计算机系统包括获取模块,用于获取正在运 行中的软件所包含的函数信息,将其保存到数据库中;激活模块,用于当该软件在运行过程 中发生崩溃时,激活计算机操作系统中的全局触发器,以读取操作系统在该软件发生崩溃 时所查找到的内存地址,该内存地址即为崩溃地址;异常捕获模块,用于启动操作系统中的 异常处理函数,通过该异常处理函数捕获该软件发生崩溃的原因及时间;查找模块,用于将
3上述崩溃地址与数据库中保存的函数信息进行比较,查找出该软件发生崩溃所对应的函数 信息;日志生成模块,用于根据所述软件发生崩溃的原因及时间、查找出的函数信息,生成 日志文件。 —种软件Bug追踪方法,该方法包括以下步骤获取正在运行中的软件所包含的 函数信息,将其保存到数据库中;当该软件运行中发生崩溃时,激活计算机操作系统中的全 局触发器,以读取操作系统在该软件发生崩溃时所查找到的内存地址,该内存地址即为崩 溃地址;启动操作系统中的异常处理函数,通过该异常处理函数捕获该软件发生崩溃的原 因及时间;将上述崩溃地址与数据库中保存的函数信息进行比较,查找出该软件发生崩溃 所对应的函数信息;根据所述软件发生崩溃的原因及时间、查找出的函数信息,生成日志文 件。 相较于现有技术,所述的软件Bug追踪方法及其计算机系统,能够准确记录软件 运行中导致该软件发生崩溃时的原因,提高了软件维护的效率。
图1是本发明软件Bug追踪计算机系统的硬件框架图。
图2是本发明图1中计算机20较佳实施例的功能模块图。
图3是本发明软件Bug追踪方法较佳实施例的流程图。
具体实施例方式
如图l所示,是本发明软件Bug追踪的计算机系统的硬件框架图。该计算机系统 主要包括计算机20及与该计算机20相连的数据库50。所述计算机20连接有显示器10、 键盘30及鼠标40,作为具体操作时的输入、输出设备。 所述数据库50既可以内置于计算机20中,也可以外置于计算机20。该数据库50 用于存储计算机20中运行的软件的函数信息。该函数信息存于软件的编译日志文件中,其 包括该软件所包含的函数名称、函数对应的内存地址、函数所对应的源代码文件名称及函 数在源代码文件中的行数等信息。在本较佳实施例中,所述函数信息的格式(以下列举三 条函数信息为例)如下所示0001 :00000020jnain 00401020 f Test, obj Client, cpp 120001:00000060 Testl@@YAXXZ 00401060 f Test.obj Dome, cpp 65 0001 :000000a0_chaesp 004010a0 f LIBCD :chaesp.obj Clip, cpp 23 以第二条为例,其中"? Test,tYAXXZ"为函数名称,在本较佳实施例中,由于
软件是由0++语言进行编写的,因此以问号开头的函数名称都是以0++修饰的名称,"@@
YAXXZ"则为区别重载函数而加的后缀,所以"? Testl@@YAXXZ"指的是源代码文件中的
"Testl"函数。"00401060"为内存地址。"Test, obj"表示编译时所调用的库函数。"Dome.
cpp"表示函数"Testl"所对应的源代码文件名称,"65"表示函数"Testl"在源代码文件
"Dome, cpp"中对应的代码行数。 如图2所示,是本发明图1中计算机20较佳实施例的功能模块图。该计算机20包 括获取模块210、激活模块211、异常捕获模块212、查找模块213及日志生成模块214。本 发明所称的模块是完成一特定功能的计算机程序段,比程序更适合于描述软件在计算机中的执行过程,因此在本发明以下对软件描述中都以模块描述。 所述获取模块210用于获取正在运行中的软件所包含的函数信息,将其保存到数 据库50中。 当该软件运行中发生崩溃时,所述激活模块211用于激活计算机20的操作系统中 的全局触发器,该全局触发器用于读取操作系统在该软件运行中发生崩溃时所查找到的内 存地址,该内存地址即为崩溃地址。具体而言,操作系统包括一种触发机制,若出现程序错 误导致该软件在运行中发生崩溃时,激活模块211会启动该触发机制,操作系统通过内部 的内存查找函数查找该软件在运行中发生崩溃位置所对应的内存地址,之后弹出一个对话 框,显示该内存地址信息。 所述异常捕获模块212用于启动操作系统中的异常处理函数,通过该异常处理函 数捕获软件运行中发生崩溃的原因及时间。 所述查找模块213用于将上述崩溃地址与数据库50中保存的函数信息进行比较, 查找出该软件运行中发生崩溃所对应的函数信息。具体而言,查找模块213将所述的崩溃 地址与数据库50中保存的函数信息中的内存地址进行比较,找出最接近的内存地址。假设 所查找到的崩溃地址为"0x00401082",其中"Ox"为崩溃地址的前缀,查找模块213提取该 崩溃地址中前缀"0x"后面的信息"00401082",之后与数据库50中保存的函数信息进行比 较,经过比较后确定该崩溃地址与函数信息中的内存地址"00401060"最接近,由此可知, 所述软件在发生崩溃时的出错函数为"Testl",该出错函数所在的源代码文件为"Dome. c卯",该出错函数"Testl"在源代码文件中的行数为第65行。 所述日志生成模块214用于根据所述软件运行中发生崩溃时的原因及时间、查找
出的函数信息,生成日志文件。该日志文件包括软件运行中发生崩溃时的崩溃地址、时间、
原因、函数名称、函数所在的源代码文件及函数在源代码文件中的行数。在本较佳实施例
中,所述日志文件的格式如下 [2008-08-08 13:13:33]EXCEPTION ADDRESS :0x0040011082EXCEPTIONTYPE :EXCEPTION_INT_DIVIDE_BY_ZERO = C0000094H
FUNCTION "Testl"AT "Dome. cpp"LINE :65
[2008-08-08 13:13:33] 其中,[2008-08-08 13:13:33]表示该软件运行中发生崩溃的时间、 EXCEPTIONADDRESS :0x0040011082表示崩溃地址、EXCEPTIONTYPE : EXCEPT I ON_ INT_DIVIDE_BY_ZERO = C0000094H表示发生崩溃的原因为除零错误、 FUNCTION "Testl"AT "Dome. cpp"LINE :65表示该软件运行中发生崩溃时的函数名称为 "Testl "、函数"Testl "所在的源代码文件名称为"Dome, cpp"及函数"Testl"在源代码文 件"Dome. c卯"中的行数为第65行。 如图3所示,是本发明软件Bug追踪方法较佳实施例的流程图。 首先,步骤SIO,获取模块210获取正在运行中的软件所包含的函数信息,将其保
存到数据库50中。 步骤S11,当该软件在运行过程中发生崩溃时,激活模块211激活计算机20的操作 系统中的全局触发器,以读取操作系统在该软件运行中发生崩溃时所查找到的内存地址,该内存地址即为崩溃地址。具体而言,操作系统中包括一种触发机制,若出现程序错误导 致该软件在运行中发生崩溃时,激活模块211会启动该触发机制,操作系统通过内部的内 存查找函数查找该软件在运行中发生崩溃所对应的内存地址,之后操作系统弹出一个对话 框,显示该内存地址信息。 步骤S12,异常捕获模块212启动操作系统中的异常处理函数,通过该异常处理函 数捕获该软件运行中发生崩溃的原因及时间。 步骤S13,查找模块213将上述崩溃地址与数据库50中保存的函数信息进行比较, 查找出该软件运行中发生崩溃所对应的函数信息。具体而言,查找模块213将所述的崩溃 地址与数据库50中保存的函数信息中的内存地址进行比较,找出最接近的内存地址。假设 所查找到的崩溃地址为"0x00401082",其中"Ox"为崩溃地址的前缀,查找模块213提取该 崩溃地址中前缀"0x"后面的信息"00401082",之后与数据库50中保存的函数信息进行比 较,经过比较后确定该崩溃地址与函数信息中的内存地址"00401060"最接近,由此可知, 所述软件在发生崩溃时的出错函数为"Testl",该出错函数所在的源代码文件为"Dome. c卯",该出错函数"Testl"在源代码文件中的行数为第65行。 步骤S14,日志生成模块214根据所述发生崩溃的原因及时间、查找出的函数信 息,生成日志文件。该日志文件包括软件运行中发生崩溃时的崩溃地址、时间、原因、函数名 称、函数所在的源代码文件及函数在源代码文件中的行数。 最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参 照以上较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本 发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。
权利要求
一种软件Bug追踪的计算机系统,其特征在于,该计算机系统包括获取模块,用于获取正在运行中的软件所包含的函数信息,将其保存到数据库中;激活模块,用于当该软件在运行过程中发生崩溃时,激活计算机操作系统中的全局触发器,以读取操作系统在该软件发生崩溃时所查找到的内存地址,该内存地址即为崩溃地址;异常捕获模块,用于启动操作系统中的异常处理函数,通过该异常处理函数捕获该软件发生崩溃的原因及时间;查找模块,用于将上述崩溃地址与数据库中保存的函数信息进行比较,查找出该软件发生崩溃所对应的函数信息;及日志生成模块,用于根据所述软件发生崩溃的原因及时间、查找出的函数信息,生成日志文件。
2. 如权利要求l所述的软件Bug追踪的计算机系统,其特征在于,所述函数信息包括正 在运行的软件所包含的函数名称、函数对应的内存地址、函数所对应的源代码文件名称及 函数在源代码文件中的行数。
3. 如权利要求1所述的软件Bug追踪的计算机系统,其特征在于,所述日志文件包括软 件运行中发生崩溃时的崩溃地址、时间、原因、函数名称、函数所在的源代码文件名称及函 数在源代码文件中的行数。
4. 一种软件Bug追踪方法,其特征在于,该方法包括以下步骤 获取正在运行中的软件所包含的函数信息,将其保存到数据库中; 当该软件运行中发生崩溃时,激活计算机操作系统中的全局触发器,以读取操作系统在该软件发生崩溃时所查找到的内存地址,该内存地址即为崩溃地址;启动操作系统中的异常处理函数,通过该异常处理函数捕获该软件发生崩溃的原因及 时间;将上述崩溃地址与数据库中保存的函数信息进行比较,查找出该软件发生崩溃所对应 的函数信息;及根据所述软件发生崩溃的原因及时间、查找出的函数信息,生成日志文件。
5. 如权利要求4所述的软件Bug追踪方法,其特征在于,所述函数信息包括正在运行的 软件所包含的函数名称、函数对应的内存地址、函数所对应的源代码文件名称及函数在源 代码文件中的行数。
6. 如权利要求4所述的软件Bug追踪方法,其特征在于,所述日志文件包括软件运行中 发生崩溃时的崩溃地址、时间、原因、函数名称、函数所在的源代码文件名称及函数在源代 码文件中的行数。
全文摘要
一种软件Bug追踪方法,该方法包括以下步骤获取正在运行中的软件所包含的函数信息,将其保存到数据库中;当该软件运行中发生崩溃时,激活计算机操作系统中的全局触发器,以读取操作系统在该软件发生崩溃时所查找到的内存地址,该内存地址即为崩溃地址;启动操作系统中的异常处理函数,通过该异常处理函数捕获该软件发生崩溃的原因及时间;将上述崩溃地址与数据库中保存的函数信息进行比较,查找出该软件发生崩溃所对应的函数信息;根据所述软件发生崩溃的原因及时间、查找出的函数信息,生成日志文件。
文档编号G06F11/36GK101770422SQ20081030667
公开日2010年7月7日 申请日期2008年12月30日 优先权日2008年12月30日
发明者常小军 申请人:鸿富锦精密工业(深圳)有限公司;鸿海精密工业股份有限公司