一种基于Qt多进程框架下的故障自动定位方法与流程

专利2025-04-09  7


本发明涉及故障监视定位,尤其涉及一种基于qt多进程框架下的故障自动定位方法。


背景技术:

1、当软件在运行过程中发生故障崩溃退出后,经常面临以下情况,导致软件故障难以定位,软件质量问题无法修复。

2、1)故障发生无据可查

3、一方面,软件运行出错退出后,没有记录任何可用信息,无法明确出错的模块和代码。另一方面,软件运行和操作日志是记录软件状态和重要操作的日志,只有在运行正常情况下能够输出,且只覆盖了软件部分功能和流程节点,无法覆盖全部函数代码,软件运行日志和操作日志很多情况下都不能反映故障真实情况,不能直接作为故障定位的依据。

4、2)故障现象难以复现

5、软件故障有多种情况,在很多情况下,即使进行相同的操作、输入相同的数据,故障现象不一定出现。另外,有些故障发生概率较低,例如异常值、临界值的处理问题等,需要几天、几周甚至更长时间才能发生,对于故障的排查带来的很大的难度。

6、3)故障发生通知缺乏实时性

7、在多进程框架中,部分进程插件可能没有界面或者界面没有打开,当进程软件发生故障后,软件工作停止,导致业务功能失常。若没有及时通知用户,会造成功能持续不可用,导致后续长时间一系列损失,造成损失的扩大。

8、4)故障信息处理不及时

9、若软件发生故障时,用户未及时处理,过一段时间再回顾当时故障发生状态时,已经记不清故障发生的具体时刻、进行的操作、输入的数据和状态。故障发生时机和故障现象描述不准确,为软件故障定位带来更多的不确定性。另外,某些重要日志可能会被其他日志覆盖或删除,导致故障信息丢失,致使故障难以定位。

10、软件故障定位传统方法之一是采用详细日志记录方法,在重要函数的入口和出口增加运行记录。当软件发生故障后,通过查看日志文件,若发现只在函数入口记录了日志,但出口未记录日志,则可定位发生该函数故障。但该方法只会定位到函数,不会定位到具体代码行,而且若函数被高频率调用,则会记录大量的日志,造成硬盘资源的大量占用。大量日志信息被写入硬盘,也会造成软件运行效率的低下。

11、另外,操作系统自身能够监控运行的软件状态,记录软件的错误信息。当在linux系统中开启core文件生成后,可以自动抓取软件的异常错误并生成core文件。该文件可以通过gdb命令进行解析,并生成可读的错误堆栈。但该操作需要用户手动查找core文件输出目录,找到对应的core文件,再输入gdb调试指令,对文件内容进行解析。此操作非常复杂,对用户操作要求很高。另外,操作系统重启或硬盘空间不够时,会自动删除core文件,造成错误日志的丢失。

12、google团队在软件故障定位中投入了很大的力量,开发了breakpad插桩监视模块,能够嵌入到软件代码工程中,自动插桩监控捕获错误信息,并生成dmp错误日志文件。但该方法也需要通过多个工具进行配合,输入复杂的指令,对dmp文件进行解析、转换,才能够获取可读的故障具体信息,一般需要专业人员人员才能完成。


技术实现思路

1、为解决现有的技术问题,本发明提供了一种基于qt多进程框架下的故障自动定位方法。

2、本发明的具体内容如下:一种基于qt多进程框架下的故障自动定位方法,包括breakpad插桩、事件队列监视和监视服务,在进程内,在进程基类中封装breakpad插桩监视和事件队列监视机制,完成进程内故障信息的监视和输出;在进程外,采用单独的监视服务,扫描进程内插桩输出的故障日志和操作系统捕获的故障日志,通过脚本自动解析故障日志中,生成可读堆栈信息。

3、进一步的,在框架内核中,对进程基类qapplication进行派生,在派生类sympapplication中集成插桩监视和事件队列监视机制,步骤包括:

4、步骤一,在类的构造函数中,调用breakpad初始化函数,设置输出日志文件路径和名称,创建breakpad回调函数,通过回调函数捕捉错误信息到指定文件;

5、步骤二,重写sympapplication的notify回调函数,在函数中添加try/catch异常捕获机制,记录异常事件的对象名、事件类型等信息,并记录到日志中,并返回true,阻止事件下行;

6、步骤三,使用派生类sympapplication替代框架进程执行程序基类qapplication,由sympapplication类完成框架进程内部插桩监视;

7、步骤四,将sympapplication集成到插件基类execativeplugin中,在插件基类的构造函数中创建sympapplication类对象,从而完成进程插件内部插桩监视。

8、进一步的,在框架进程启动时,启动监视服务,并将进程信息与监视服务进行同步,步骤包括:

9、步骤一,框架启动时创建共享内存,建立跨进程通信的机制;

10、步骤二,启动监视服务进程;

11、步骤三,收集将框架以及业务插件进程信息,打包写入共享内存;

12、步骤四,当框架中的进程发生变化后,重新将进程信息打包写入共享内存;

13、步骤五,关闭框架时,同时关闭监视服务。

14、进一步的,监视服务定时同步框架传送来的进程信息,并定时扫描各个进程的故障日志信息,对错误日志进行自动解析和显示,步骤包括:

15、步骤一,连接共享内存,读取共享内存中的进程信息到进程列表中;

16、步骤二,根据进程列表中的进程信息,获取对应的dmp文件和core文件目录,开启定时器,到对应的日志文件目录中进行扫描,获取对应进程新产生的日志文件;

17、步骤三,根据日志文件类型,组装命令脚本,通过脚本执行对文件进行解析,生成可阅读的堆栈信息;

18、步骤四,弹出界面,对堆栈文本进行可视化显示。

19、进一步的,步骤二定时扫描的过程包括:

20、dmp格式故障日志文件的扫描处理过程如下包括:

21、(1)获取dmp日志文件目录:根据框架中的插件组织结构,获取每个进程的dmp日志文件输出目录;

22、(2)扫描dmp文件:开启定时器,定时扫描每个dmp文件目录,获取目录中所有文件信息,包括文件名称、生成时间信息;

23、(3)信息比对:从日志文件名称中提取进程号,与当前进程号进行比对;获取日志文件生成时间,与当前计算机时间进行比对,若提取的进程号与当前进程的进程号相同,且文件生成时间与当前时间相差在阈值范围内,代表扫描到新的dmp文件,转入步骤三;

24、core格式故障日志文件的扫描处理过程包括:

25、(1)获取操作系统core文件输出参数:调用操作系统命令“cat/proc/sys/kernel/core_pattern”,获取操作系统core文件的输出目录和文件名格式;

26、(2)扫描core文件:开启定时器,定时扫描操作系统core文件目录,过滤core开头的文件,得到目录中所有的core文件;

27、(3)提取core文件信息:获取每个core文件的文件名,从文件名中提取对应的进程号;

28、(4)信息比对:将进程号与进程信息列表中进程号进行比对,若进程列表中包含该进程号,则代表该日志文件为由框架或某个插件进程产生,若文件生成时间与当前时间相差在阈值范围内,代表扫描到新的core文件,转入步骤三。

29、进一步的,步骤三对文件进行解析包括:

30、对于dmp格式日志文件,提取的信息包括模块调用关系和调用堆栈两种:

31、(1)模块调用关系解析:需利用breakpad中提供的工具,操作包括软件符号提取和调用关系文件生成两个步骤:

32、(11)软件符号提取:调用dump_syms工具,提取进程软件符号信息到temp.sym文件中;

33、(12)调用关系文件生成:调用minidump_stackwalk工具,并利用步骤(11)生成的temp.sym,解析dmp文件中的调用关系信息,并输出到文本文件中;

34、(2)调用堆栈解析:需要breakpad工具和gdb工具配合完成,首先需使用breakpad工具将文件转换为core格式文件,再调用gdb调试命令,解析出可读堆栈信息,具体操作过程如下:

35、(21)格式转换:调用minidump-2-core工具,将dmp格式转换为core格式,输出到cortemp文件中;

36、(22)堆栈解析:调用gdb调试命令,从转换后的core文件中提取当前错误堆栈及函数信息;

37、对于core格式日志文件,直接调用gdb命令对调用堆栈进行解析。

38、进一步的,步骤四中,对同一个进程不同日志文件解析结果在同一个界面中进行显示。

39、进一步的,监视服务中定时连接共享内存,若共享内存连接不成功,监视服务需继续运行一段时间,扫描是否有框架的故障日志产生,若未扫描到新的故障日志,则自行退出。

40、本发明结合多进程应用集成框架的特点,在框架平台层对故障监视定位功能进行封装,对框架及业务插件进程进行统一监控,通过插桩监视和外部监视两种手段,从进程内和进程外两个层面,对对进程软件故障信息进行监视和定位,实现软件运行过程中错误信息的及时抓取,完成错误信息的自动解析与实时显示。


技术特征:

1.一种基于qt多进程框架下的故障自动定位方法,其特征在于:包括breakpad插桩、事件队列监视和监视服务,在进程内,在进程基类中封装breakpad插桩监视和事件队列监视机制,完成进程内故障信息的监视和输出;在进程外,采用单独的监视服务,扫描进程内插桩输出的故障日志和操作系统捕获的故障日志,通过脚本自动解析故障日志中,生成可读堆栈信息。

2.根据权利要求1所述的基于qt多进程框架下的故障自动定位方法,其特征在于:在框架内核中,对进程基类qapplication进行派生,在派生类sympapplication中集成插桩监视和事件队列监视机制,步骤包括:

3.根据权利要求1所述的基于qt多进程框架下的故障自动定位方法,其特征在于:在框架进程启动时,启动监视服务,并将进程信息与监视服务进行同步,步骤包括:

4.根据权利要求1所述的基于qt多进程框架下的故障自动定位方法,其特征在于:监视服务定时同步框架传送来的进程信息,并定时扫描各个进程的故障日志信息,对错误日志进行自动解析和显示,步骤包括:

5.根据权利要求4所述的基于qt多进程框架下的故障自动定位方法,其特征在于:步骤二定时扫描的过程包括:

6.根据权利要求4所述的基于qt多进程框架下的故障自动定位方法,其特征在于:步骤三对文件进行解析包括:

7.根据权利要求4所述的基于qt多进程框架下的故障自动定位方法,其特征在于:步骤四中,对同一个进程不同日志文件解析结果在同一个界面中进行显示。

8.根据权利要求4所述的基于qt多进程框架下的故障自动定位方法,其特征在于:监视服务中定时连接共享内存,若共享内存连接不成功,监视服务需继续运行一段时间,扫描是否有框架的故障日志产生,若未扫描到新的故障日志,则自行退出。


技术总结
本发明涉及一种基于Qt多进程框架下的故障自动定位方法,包括breakpad插桩、事件队列监视和监视服务,在进程内,在进程基类中封装breakpad插桩监视和事件队列监视机制,完成进程内故障信息的监视和输出;在进程外,采用单独的监视服务,扫描进程内插桩输出的故障日志和操作系统捕获的故障日志,通过脚本自动解析故障日志中,生成可读堆栈信息。本发明在框架平台层对故障监视定位功能进行封装,对框架及业务插件进程进行统一监控,通过插桩监视和外部监视两种手段,从进程内和进程外两个层面,对对进程软件故障信息进行监视和定位,实现软件运行过程中错误信息的及时抓取,完成错误信息的自动解析与实时显示。

技术研发人员:李继进,李维,黄春阳,张航峰
受保护的技术使用者:中国电子科技集团公司第十四研究所
技术研发日:
技术公布日:2024/11/11
转载请注明原文地址: https://tieba.8miu.com/read-12934.html

最新回复(0)