您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页一种linux系统下用户态进程异常的分析方法[发明专利]

一种linux系统下用户态进程异常的分析方法[发明专利]

来源:爱go旅游网
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号 CN 105824749 A(43)申请公布日 2016.08.03

(21)申请号 201610131609.1(22)申请日 2016.03.09

(71)申请人 上海博达数据通信有限公司

地址 201203 上海市浦东新区中国(上海)

自由贸易试验区居里路123号(72)发明人 王仁雷 苟利平 

(74)专利代理机构 上海天翔知识产权代理有限

公司 31224

代理人 刘常宝(51)Int.Cl.

G06F 11/36(2006.01)

权利要求书1页 说明书4页 附图1页

()发明名称

一种linux系统下用户态进程异常的分析方法

(57)摘要

本发明公开了一种linux系统下用户态进程异常的分析方法,本方法通过进程自身接管特定的信号获取异常时的任务上下文并按体系结构解析任务堆栈实现了对异常的分析。本方案能够协助软件开发人员快速准确定位并解决软件BUG。

CN 105824749 ACN 105824749 A

权 利 要 求 书

1/1页

1.一种linux系统下用户态进程异常的分析方法,其特征在于,所述分析方法通过进程自身来进行异常分析。

2.根据权利要求1所述的一种linux系统下用户态进程异常的分析方法,其特征在于,所述分析方法通过在进程自身增加异常分析功能,由进程本身进行解析异常原因。

3.根据权利要求2所述的一种linux系统下用户态进程异常的分析方法,其特征在于,所述分析方法中通过进程自身接管特定的信号来获取异常时的任务上下文,并按体系结构解析任务堆栈,实现对异常的分析。

4.根据权利要求3所述的一种linux系统下用户态进程异常的分析方法,其特征在于,所述分析方法具体包括如下步骤:

(1)进程启动后接管要进行异常分析的信号,并重新设置信号处理程序;

即跳到步骤(3);(2)当接管的信号发生时,系统将自动调用之前设置的信号处理程序,

(3)获取异常类型、异常线程的名称,按CPU的体系结构获取异常时CPU寄存器上下文;(4)根据异常时CPU的寄存器获取任务堆栈信息;(5)根据异常时CPU的寄存器、任务堆栈信息分析得到异常指令、异常函数及异常函数的调用关系;

(6)输出解析后的异常信息;(7)记录解析后的异常信息。

5.根据权利要求4所述的一种linux系统下用户态进程异常的分析方法,其特征在于,所述步骤(3)中CPU的体系结构为MIPS。

6.根据权利要求4所述的一种linux系统下用户态进程异常的分析方法,其特征在于,所述步骤(6)中通过IO系统输出解析后的异常信息。

7.根据权利要求4所述的一种linux系统下用户态进程异常的分析方法,其特征在于,所述步骤(7)中通过日志系统记录解析后的异常信息。

2

CN 105824749 A

说 明 书

一种linux系统下用户态进程异常的分析方法

1/4页

技术领域

[0001]本发明涉及软件系统技术,具体涉及软件系统中调试分析技术。

背景技术

[0002]现有的gdb调试技术已经有截获异常并分析包括进程函数调用关系在内的多数调试信息的能力。

[0003]但在实际使用和测试过程中不可能开着gdb运行,如果这时程序出BUG,开发人员就并不清楚具体发生了什么错误,这会导致解决BUG的时间被延迟,影响开发人员调试工作

则情况会变得更加严重。效率,如果BUG不易复现,

[0004]由此可见,提供一种准确高效的BUG定位技术是本领域亟需解决的问题。发明内容

[0005]本发明针对现有linux应用软件开发中BUG调试过程长,影响软件开发人员调试工作效率的问题,而提供一种准确、高效的BUG定位方案,能极大的降低软件开发的调试难度,显著提高软件BUG解决效率。[0006]为了达到上述目的,本发明采用如下的技术方案:[0007]一种linux系统下用户态进程异常的分析方法,所述分析方法通过进程自身来进行异常分析。

[0008]优选的,所述分析方法通过在进程自身增加异常分析功能,由进程本身进行解析异常原因。

[0009]优选的,所述分析方法中通过进程自身接管特定的信号来获取异常时的任务上下文,并按体系结构解析任务堆栈,实现对异常的分析。[0010]优选的,所述分析方法具体包括如下步骤:[0011](1)进程启动后接管要进行异常分析的信号,并重新设置信号处理程序;[0012](2)当接管的信号发生时,即跳到步骤系统将自动调用之前设置的信号处理程序,(3);

[0013](3)获取异常类型、异常线程的名称,按CPU的体系结构获取异常时CPU寄存器上下文;

[0014](4)根据异常时CPU的寄存器获取任务堆栈信息;[0015](5)根据异常时CPU的寄存器、任务堆栈信息分析得到异常指令、异常函数及异常函数的调用关系;

[0016](6)输出解析后的异常信息;[0017](7)记录解析后的异常信息。[0018]优选的,所述步骤(3)中CPU的体系结构为MIPS。[0019]优选的,所述步骤(6)中通过IO系统输出解析后的异常信息。[0020]优选的,所述步骤(7)中通过日志系统记录解析后的异常信息。

3

CN 105824749 A[0021]

说 明 书

2/4页

本发明通过给进程自身增加异常分析功能,使进程本身具有解析异常原因的能

力,辅助开发人员调试和解决问题,从而提供一种准确高效的BUG定位手段,能极大的降低软件开发的调试难度,显著提高软件BUG解决效率。

附图说明

[0022]以下结合附图和具体实施方式来进一步说明本发明。[0023]图1为本发明实施中获取异常函数调用关系的流程图。

具体实施方式

[0024]为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。

[0025]本实例以MIPS处理器运行linux多线程系统为例进一步说明本发明方案具体的实施过程,具体实施步骤如下:

[0026]1.进程启动后接管要进行异常分析的信号:SIGILL、SIGBUS、SIGFPE、SIGSEGV、SIGIO信号,并重新设置信号处理程序;[0027]2.当上述信号发生时,系统会自动调用之前设置的信号处理程序,即跳到步骤(3);

[0028]3.获取异常类型、异常线程的名称,按CPU的体系结构获取异常时CPU寄存器上下文:

[0029]入参1为信号类型,通过gettid获取线程id,入参3中获取异常时MIPS寄存器上下文,其格式如下所示:

4

CN 105824749 A

说 明 书

3/4页

[0030]

4.以sc_regs[29]为栈顶获取任务堆栈信息;

[0032]5.sc_pc为异常指令,查找符号表可获取异常函数,再根据MIPS寄存器上下文、任务堆栈信息分析得到异常函数的调用关系,具体过程如下(参见图1):[0033]51.从寄存器上下文的sc_pc获取pc;

[0034]52.从寄存器上下文的sc_regs[29]获取本级栈帧;[0035]53.判断获取的pc是否合法:若合法,转入步骤(),若不符合,结束本次分析;[0036].按pc查找符号表,再把pc指向对应的函数入口;[0037]55.分析pc处的指令是否为分配本级栈帧指令:若不是(即为叶子函数),转入步骤(56);若是(即为非叶子函数),则转入步骤(58);[0038]56.确定上级栈帧即为本级栈帧;

[0039]57.从寄存器上下文的sc_regs[31]获取ra,并执行步骤(61);[0040]58.计算获取上级栈帧pc指向下条指令;

[0031]

5

CN 105824749 A[0041]

说 明 书

4/4页

59.分析pc处的指令是否为ra入栈指令:若不是且分支不可达,则结束本次分析;

若是,则转入步骤(60);[0042]60.获取ra;

[0043]61.pc指向ra继续分析上级栈帧,并转入步骤(53);[0044]6.通过printf()函数输出解析后的异常信息;

[0045]7.在非易失性随机访问存储器中记录解析后的异常信息,用于以后查看异常信息。

[0046]通过上述实例可知,通过进程自身接管特定的信号来获取异常时的任务上下文,并按体系结构解析任务堆栈,实现对异常的分析,能够快速、准确的定位软件BUG。[0047]本实例方案适用于辅助开发人员在MIPS体系结构的linux系统中调试BUG。[0048]再者,基于上述实例方案,所有体系结构的CPU及类unix系统都能变通实现,其原理都如上所述,此处不加以赘述。

[0049]以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

6

CN 105824749 A

说 明 书 附 图

1/1页

图1

7

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务