对计算机软件系统崩溃原因进行自动分析的方法技术方案

技术编号:4211547 阅读:420 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种对计算机软件系统崩溃原因进行自动分析的方法。对计算机软件系统崩溃原因进行自动分析的方法,其包括如下步骤:a、打开崩溃转储文件;b、分别检索每个处理器每个线程的堆栈信息,对于用户态崩溃转储文件寻找用户态的异常错误触发函数;对于内核态崩溃转储文件寻找内核态的异常错误触发函数;c、根据搜索到的异常错误触发函数,检查异常发生时刻的上一个调用函数,如果这个调用函数是一个有效的函数名,则暂定该调用函数为崩溃函数,把该调用函数隶属的模块暂定为崩溃模块;d、根据获得的崩溃函数和崩溃模块获取崩溃信息,并将崩溃信息存储至数据库。上述的优点是可实现对软件系统崩溃原因的自动分析。

【技术实现步骤摘要】

本专利技术涉及计算机软件系统维护领域,尤其涉及一种对计算机软件系统崩溃原因进行自动分析的方法
技术介绍
计算机的软件系统在运行过程中,会因为各种未知因素而产生异常,最终造成应 用程序崩溃或操作系统蓝屏,崩溃分析技术是指,对软件系统运行出错后生成的崩溃转储 文件(dump)进行分析和统计,并从中找出崩溃发生时的地址及其相关代码行,从而为解决 软件系统故障提供可信的依据。目前大多数已知的崩溃分析仅仅实现了崩溃文件的收集和 异常点的统计(利用的是软件系统崩溃时候的异常指针实现),而且均未提供针对系统蓝 屏以后的内核态崩溃转储文件的分析功能。
技术实现思路
本专利技术的目的是克服现有技术中的不足,提供一种对计算机软件系统崩溃原因进 行自动分析的方法,使用该方法可以自动对崩溃转储文件进行分析,并且获取崩溃函数和 崩溃模块,进而获知多项具体的崩溃信息,便于对各种不同崩溃信息的统计。 为了实现上述目的,采用以下技术方案 ,其包括如下步骤 a、打开崩溃转储文件; b、分别检索每个处理器每个线程的堆栈信息,对于用户态崩溃转储文件寻找用户 态的异常错误触发函数;对于内核态崩溃转储文件寻找内核态的异常错误触发函数; c、根据搜索到的异常错误触发函数,检查异常发生时刻的上一个调用函数,如果 这个调用函数是一个有效的函数名,则暂定该调用函数为崩溃函数,把该调用函数隶属的 模块暂定为崩溃模块; d、根据获得的崩溃函数和崩溃模块获取崩溃信息,并将崩溃信息存储至数据库。 进一步的技术方案是, 在步骤a和步骤b之间还包括步骤al : al 、给崩溃转储文件进行唯一命名。 再进一步的技术方案是, 在步骤al和步骤b之间还包括步骤a2 : a2、加载调试符号文件。 上述方法利用Windows操作系统提供的调试机制,自动对崩溃转储文件中保存的崩溃发生时的内存数据进行分析,并回溯出函数调用序列、寄存器数值、崩溃发生时加载的模块信息、崩溃发生的地址信息及其相关系统,从中找出导致崩溃发生的原因,可以为后续的软件故障分析及软件质量评估提供可信的依据。本专利技术方法的主要优点为 1、基于Windows调试技术技术,把一系列的分析流程自动化,并根据分析结果进行自动取舍,智能选取分析操作命令,有效的解决了崩溃转储分析中对操作人员的技术要 求过高的问题。 2、支持一系列的崩溃分析规则,根据不同的崩溃流程,使用不同的规则进行分析。 3、支持针对系统蓝屏以后的内核态崩溃转储文件的分析能够直接定位到具体的 崩溃函数、代码行号、崩溃现场的堆栈数据等内容。具体实施例方式本专利技术的方法的原理是基于Windows调试技术及其相应的调试API。 Windows调试技术内置在操作系统内核里面,对外提供了一系列的Windows API和组件包。本专利技术利用了 Windows调试技术提供的组件包Debugging Tools for Windows (以下简称WinDBG)里面提供的Windows调试引擎,对崩溃转储文件进行自动的分析。本专利技术方法本身针对的对象是崩溃转储文件。崩溃转储文件的生成方法主要有以下一些 參Windows错误报告机制 MiniD卿WriteD卿Windows API 參读取崩溃进程的内存 參应用程序调试器 利用上述方法生成崩溃转储文件以后,就可以利用下面介绍的方法进行崩溃转储 的分析过程了。 ,其包括如下步骤 a、打开崩溃转储文件,检查文件的合法性和有效性; al、给崩溃转储文件进行唯一命名以便后续文件的管理; a2、加载调试符号文件;调试符号文件是将被调试程序的二进制信息与源程序代 码联系起来的桥梁,调试符号文件中记录了变量、类型、函数定义、源代码行等信息。 a3、检查崩溃发生时刻的软件运行环境,对于x64系统,如果运行在WoW64环境下, 则进行32位-64位运行环境切换,否则不进行环境切换。 b、分别检索每个处理器每个线程的堆栈信息,对于用户态崩溃转储文件寻找用户 态的异常错误触发函数;对于内核态崩溃转储文件寻找内核态的异常错误触发函数;如果 没有找到异常错误触发函数,跳转到步骤c2。 c、根据搜索到的异常错误触发函数,检查异常发生时刻的上一个调用函数,如果 这个调用函数是一个有效的函数名,则暂定该调用函数为崩溃函数,把该调用函数隶属的 模块暂定为崩溃模块; cl、如果步骤c找到的崩溃模块或者崩溃函数属于信任模块列表,那么继续检查 步骤b中搜索到的异常错误触发函数所在崩溃发生线程的再上一个调用函数,直到所检查 到的调用函数及其所在的模块为非信任模块,把这个最后检查到的函数定为崩溃函数,该 崩溃函数隶属的模块记为崩溃模块。所说的信任模块列表中包含多个信任模块,这些信任 模块是指编程人员认为可以确定为不可能是导致系统崩溃的模块;如果该过程结束后没有 找到崩溃函数,转到步骤c3 ;如果找到崩溃函数,进入步骤d。 c2、根据寄存器的值获得崩溃地址、异常错误代码,然后根据崩溃地址,利用 Windows调试引擎提供的API和命令对崩溃转储文件进行原始调用栈分析,获取最近的崩溃模块和最近的一个调用函数,并把最近的一个调用函数记为崩溃函数,把这个函数隶属 的模块记为崩溃模块;如果该过程结束后没有找到崩溃函数,转到步骤c3 ;如果找到崩溃 函数,进入步骤d。 c3、对崩溃时候的崩溃地址进行反汇编,检查是否存在可以标识出崩溃函数的信 息,如果该过程结束后没有找到崩溃函数,转到步骤c4 ;如果找到崩溃函数,进入步骤d。 c4、那么将崩溃函数记录为未找到状态,把崩溃模块记录为异常发生时刻线程所 属的模块。 d、根据获得的崩溃函数和崩溃模块获取崩溃信息,并将崩溃信息存储至数据库。 目前已知用户态的异常错误崩溃触发函数如下,并会根据操作系统的更新而不断 的改变 kernel32. dll提供的UnhandledExc印tionFilter函数、kernel32. dll提供 的FatalAppExitW函数、ke潔132. dll提供的FatalAppExitA函数、ke潔132. dll提供 的RaiseException函数、kernelbase. dll提供的RaiseException函数、ntdll. dll提 供的NtRaiseHardError函数、ntdll. dll提供的NtRaiseExc印tion函数、ntdll. dll提 供的KiUserExc印tionDispatcher函数、CxxThrowExc印tion函数、ntdll. dll提供的 TppExc印tionFilter函数、ntdll. dll提供的TppWorkerpI騰rExc印tionFilter函数、 except—handler函数、exc印t—handler2函数、exc印t—handler3函数、report—failure函 目前已知内核态的异常错误崩溃触发函数如下,并会根据操作系统的更新而不断 的改变Windows内核提供的KeBugCheck、 KeBugCheckEx、 KeBugCheckEx2、 KiTrap、DbgBreakPoint、 DbgUserBreakPoint、 ExpRaiseHardError、 ExpSystemErro:本文档来自技高网...

【技术保护点】
对计算机软件系统崩溃原因进行自动分析的方法,其特征在于,包括如下步骤:a、打开崩溃转储文件;b、分别检索每个处理器每个线程的堆栈信息,对于用户态崩溃转储文件寻找用户态的异常错误触发函数;对于内核态崩溃转储文件寻找内核态的异常错误触发函数;c、根据搜索到的异常错误触发函数,检查异常发生时刻的上一个调用函数,如果这个调用函数是一个有效的函数名,则暂定该调用函数为崩溃函数,把该调用函数隶属的模块暂定为崩溃模块;d、根据获得的崩溃函数和崩溃模块获取崩溃信息,并将崩溃信息存储至数据库。

【技术特征摘要】

【专利技术属性】
技术研发人员:张康宗张强郑有胜罗勇
申请(专利权)人:珠海市君天电子科技有限公司
类型:发明
国别省市:44[中国|广东]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1