Linux下的崩溃文件自动化分析方法及系统技术方案

技术编号:15220684 阅读:66 留言:0更新日期:2017-04-26 21:35
本发明专利技术公开了Linux下的崩溃文件自动化分析方法及系统;包括如下步骤:使用预定参数对或者c++源代码行编译生成运行程序prog;设置内存转储文件的检测周期;运行prog程序;如果程序运行有问题,会在运行目录下产生一个名字为“core.进程号”的内存转储文件,按照设定的检测周期,检测内存转储文件是否存在,若存在就将内存转储文件转移到临时目录,使用脚本及gdb调试程序对内存转储文件进行分析,定位程序出错位置,分析结束之后,删除内存转储文件;使用脚本将步骤(5)中分析出来的结果生成统计报告。本发明专利技术生成的报表可以统计问题出现次数,问题代码位置,为修改问题的优先级提供更有力的支持。

Method and system for automatically analyzing crash file under Linux

The invention discloses a method and a system crash file under Linux automation analysis; comprises the following steps: using a predetermined parameters on or c++ source code compiled for the prog program; the detection cycle set a memory dump file; prog program; if the program runs a problem, a memory dump file will run in a directory the name of \core. process\, in accordance with the testing period setting, test memory dump file exists, if there is to transfer a memory dump file to the temporary directory, use the script and the GDB debugger to memory dump file analysis, positioning error analysis program, after deleting a memory dump file using the script; step (5) in the analysis of the results of statistical report generation. The report generated by the invention can count the number of occurrences of the problem and the position of the problem code to provide more powerful support for modifying the priority of the problem.

【技术实现步骤摘要】

本专利技术涉及一种Linux下的崩溃文件自动化分析方法及系统。
技术介绍
Linux系统下常用的程序调试方式有以下几种:一,程序中加入调试信息,针对某些需要关注的变量,把变量值写入日志文件,程序执行完之后查看日志文件,分析程序的执行步骤及结果。二,使用gdb调试程序,使用gdb加载程序后,设置断点,单步执行观察执行输出,或者执行到断点之后通过指令输出变量信息检查执行结果。三,程序崩溃之后产生内存转储文件,通过gdb对转储文件进行调试,查看代码执行顺序以及内存堆栈信息,配合源代码进行分析,定位问题。从大量的正常、异常信息中筛选出需要的调试信息费时费力;实时调试最大的难度是对发生问题的场景很难完全还原,不能重现问题;对转储文件进行调试,较前两种方式更为方便快捷,但是也需要人来判断问题点,如果同时分析多个程序,较为繁琐。
技术实现思路
本专利技术的目的就是为了解决上述问题,提供一种Linux下的崩溃文件自动化分析方法及系统,它通过gdb工具及脚本语言,自动对程序崩溃产生的内存转储文件进行分析,定位程序崩溃代码,并且可以按指定的周期对出错程序,错误位置进行统计,生成报表,不需要人工进行干预。生成的报表可以统计问题出现次数,问题代码位置,为修改问题的优先级提供更有力的支持。为了实现上述目的,本专利技术采用如下技术方案:一种Linux下的崩溃文件自动化分析方法,包括如下步骤:步骤(1):使用预定参数对或者c++源代码行编译生成运行程序prog;prog是个标识;步骤(2):设置内存转储文件的检测周期;步骤(3):运行prog程序;步骤(4):如果程序运行有问题,会在运行目录下产生一个名字为“core.进程号”的内存转储文件,按照步骤(2)设定的检测周期,检测内存转储文件是否存在,若存在就进入步骤(5);若不存在就返回步骤(4);步骤(5):将内存转储文件转移到临时目录,使用脚本及gdb调试程序对内存转储文件进行分析,定位程序出错位置,分析结束之后,删除内存转储文件;步骤(6):使用脚本将步骤(5)中分析出来的结果生成统计报告。所述步骤(1)的预定参数为-g参数。所述步骤(1)的编译方法为:g++-g[其他参数][源代码文件名];所述步骤(5)中,内存转储文件占用的存储空间大,对内存转储文件分析完成后可以直接将内存转储文件进行删除,也可以对内存转储文件进行压缩后存储,每隔设定时间删除历史内存转储文件,以备人工检索;所述步骤(6)分析出来的结果包括:内存转储文件产生时间、出错代码位置、相同位置出错次数。所述步骤(5)的步骤为:步骤(5-1):启动gdb调试程序,加载“core.进程号”的内存转储文件;步骤(5-2):在gdb调试程序中输入bt指令,显示内存转储文件的堆栈内容;步骤(5-3):gdb调试程序列出堆栈内容及执行代码至屏幕;所述堆栈内容与所述执行代码之间是一一对应的;步骤(5-4):脚本对堆栈内容及执行代码进行解析,提取解析结果。所述步骤(5-2)的堆栈内容包括:prog程序崩溃时所产生的变量值以及prog程序的执行地址。所述步骤(5-4)的解析步骤为:步骤(a):步骤(a)包括步骤(a1)和步骤(a2);步骤(a1):从堆栈内容及执行代码中取出以“#0”开头的语句;步骤(a2):同时,从堆栈内容及执行代码中取出所有以“#”开头的语句,记录为堆栈信息;步骤(b):将步骤(a1)中取出的语句以空格为分割符,分割成多段;步骤(c):针对步骤(b)的分割结果;记录第一段内容和第七段内容;所述第一段内容为类名:函数名,所述第七段内容为代码文件名:行号。所述步骤(5-3)输出的一个堆栈内容及执行代码样例:按空格分割的内容分别为序号内存地址代码中的类名函数名函数入口地址,参数地址代码文件名称:行号。一种Linux下的崩溃文件自动化分析系统,包括:编译单元,被配置为使用预定参数对或者c++源代码行编译生成运行程序prog;prog是个标识;设置单元,被配置为设置内存转储文件的检测周期;运行单元,被配置为运行prog程序;检测单元,被配置为如果程序运行有问题,会在运行目录下产生一个名字为“core.进程号”的内存转储文件,按照设定的检测周期,检测内存转储文件是否存在,若存在就进入分析单元;分析单元,被配置为将内存转储文件转移到临时目录,使用脚本及gdb调试程序对内存转储文件进行分析,定位程序出错位置,分析结束之后,删除内存转储文件;生成单元,被配置为使用脚本分析出来的结果生成统计报告。所述分析单元,包括:启动模块,被配置为启动gdb调试程序,加载“core.进程号”的内存转储文件;显示模块,被配置为在gdb调试程序中输入bt指令,显示内存转储文件的堆栈内容;输出模块,被配置为gdb调试程序列出堆栈内容及执行代码至屏幕;所述堆栈内容与所述执行代码之间是一一对应的;解析模块,被配置为脚本对堆栈内容及执行代码进行解析,提取解析结果。所述显示模块的堆栈内容包括:prog程序崩溃时所产生的变量值以及prog程序的执行地址。所述解析模块,包括:语句提取子模块,包括:第一语句提取子模块和第二语句提取子模块;第一语句提取子模块,被配置为从堆栈内容及执行代码中取出以“#0”开头的语句;第二语句提取子模块,被配置为从堆栈内容及执行代码中取出所有以“#”开头的语句,记录为堆栈信息;分割子模块,被配置为将中取出的语句以空格为分割符,分割成多段;记录子模块,被配置为针对分割结果;记录第一段内容和第七段内容;所述第一段内容为类名:函数名,所述第七段内容为代码文件名:行号。本专利技术的有益效果:1对于非定期出现的程序bug可以及时捕捉;2无须人工干预;3统计功能为代码质量分析提供依据。附图说明图1为运行流程图。具体实施方式下面结合附图与实施例对本专利技术作进一步说明。如图1所示,一种Linux下的崩溃文件自动化分析方法,包括如下步骤:1使用特定参数编译代码,并启动程序;2启动程序;3检测到内存转储文件生成,启动gdb工具对内存转储文件进行分析;4启动gdb之后,输入bt指令,显示堆栈内容;#00x001d2a40inCFigureMenuItemBase::Draw(this=0x5f4fd50,bSel=-1093630660)atMenuItem.cpp:138按空格分割的内容分别为序号内存地址代码中的类名函数名函数入口地址,参数地址代码文件名称:行号5从堆栈内容中分析得到所需内容写入统计报告。上述虽然结合附图对本专利技术的具体实施方式进行了描述,但并非对本专利技术保护范围的限制,所属领域技术人员应该明白,在本专利技术的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本专利技术的保护范围以内。本文档来自技高网...

【技术保护点】
一种Linux下的崩溃文件自动化分析方法,其特征是,包括如下步骤:步骤(1):使用预定参数对或者c++源代码行编译生成运行程序prog;prog是个标识;步骤(2):设置内存转储文件的检测周期;步骤(3):运行prog程序;步骤(4):如果程序运行有问题,会在运行目录下产生一个名字为“core.进程号”的内存转储文件,按照步骤(2)设定的检测周期,检测内存转储文件是否存在,若存在就进入步骤(5);若不存在就返回步骤(4);步骤(5):将内存转储文件转移到临时目录,使用脚本及gdb调试程序对内存转储文件进行分析,定位程序出错位置,分析结束之后,删除内存转储文件;步骤(6):使用脚本将步骤(5)中分析出来的结果生成统计报告。

【技术特征摘要】
1.一种Linux下的崩溃文件自动化分析方法,其特征是,包括如下步骤:步骤(1):使用预定参数对或者c++源代码行编译生成运行程序prog;prog是个标识;步骤(2):设置内存转储文件的检测周期;步骤(3):运行prog程序;步骤(4):如果程序运行有问题,会在运行目录下产生一个名字为“core.进程号”的内存转储文件,按照步骤(2)设定的检测周期,检测内存转储文件是否存在,若存在就进入步骤(5);若不存在就返回步骤(4);步骤(5):将内存转储文件转移到临时目录,使用脚本及gdb调试程序对内存转储文件进行分析,定位程序出错位置,分析结束之后,删除内存转储文件;步骤(6):使用脚本将步骤(5)中分析出来的结果生成统计报告。2.如权利要求1所述的一种Linux下的崩溃文件自动化分析方法,其特征是,所述步骤(5)中,内存转储文件占用的存储空间大,对内存转储文件分析完成后可以直接将内存转储文件进行删除,也可以对内存转储文件进行压缩后存储,每隔设定时间删除历史内存转储文件,以备人工检索。3.如权利要求1所述的一种Linux下的崩溃文件自动化分析方法,其特征是,所述步骤(6)分析出来的结果包括:内存转储文件产生时间、出错代码位置、相同位置出错次数。4.如权利要求1所述的一种Linux下的崩溃文件自动化分析方法,其特征是,所述步骤(5)的步骤为:步骤(5-1):启动gdb调试程序,加载“core.进程号”的内存转储文件;步骤(5-2):在gdb调试程序中输入bt指令,显示内存转储文件的堆栈内容;步骤(5-3):gdb调试程序列出堆栈内容及执行代码至屏幕;所述堆栈内容与所述执行代码之间是一一对应的;步骤(5-4):脚本对堆栈内容及执行代码进行解析,提取解析结果。5.如权利要求4所述的一种Linux下的崩溃文件自动化分析方法,其特征是,所述步骤(5-2)的堆栈内容包括:prog程序崩溃时所产生的变量值以及prog程序的执行地址。6.如权利要求4所述的一种Linux下的崩溃文件自动化分析方法,其特征是,所述步骤(5-4)的解析步骤为:步骤(a):步骤(a)包括步骤(a1)和步骤(a2);步骤(a1):从堆栈内容及执行代码中取出以“#0”开头的语句;步骤(a2):同时,从堆栈内容及执行代码中取出所有以“#...

【专利技术属性】
技术研发人员:傅晓冯飞崔丽蓉张晓花傅孟潮
申请(专利权)人:山东鲁能智能技术有限公司
类型:发明
国别省市:山东;37

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

1