首页> 中国专利> 一种linux系统下用户态进程异常的分析方法

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

摘要

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

著录项

  • 公开/公告号CN105824749A

    专利类型发明专利

  • 公开/公告日2016-08-03

    原文格式PDF

  • 申请/专利权人 上海博达数据通信有限公司;

    申请/专利号CN201610131609.1

  • 发明设计人 王仁雷;苟利平;

    申请日2016-03-09

  • 分类号

  • 代理机构上海天翔知识产权代理有限公司;

  • 代理人刘常宝

  • 地址 201203 上海市浦东新区中国(上海)自由贸易试验区居里路123号

  • 入库时间 2023-06-19 00:11:02

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-07-07

    专利权质押合同登记的生效 IPC(主分类):G06F11/36 登记号:Y2020980003093 登记生效日:20200615 出质人:上海博达数据通信有限公司 质权人:上海浦创龙科融资租赁有限公司 发明名称:一种linux系统下用户态进程异常的分析方法 授权公告日:20190625 申请日:20160309

    专利权质押合同登记的生效、变更及注销

  • 2020-07-07

    专利实施许可合同备案的生效 IPC(主分类):G06F11/36 合同备案号:X2020980003092 让与人:上海博达数据通信有限公司 受让人:上海浦创龙科融资租赁有限公司 发明名称:一种linux系统下用户态进程异常的分析方法 申请公布日:20160803 授权公告日:20190625 许可种类:独占许可 备案日期:20200615 申请日:20160309

    专利实施许可合同备案的生效、变更及注销

  • 2019-06-25

    授权

    授权

  • 2016-08-31

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20160309

    实质审查的生效

  • 2016-08-03

    公开

    公开

说明书

技术领域

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

背景技术

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

但在实际使用和测试过程中不可能开着gdb运行,如果这时程序出BUG,开发人员就并不清楚具体发生了什么错误,这会导致解决BUG的时间被延迟,影响开发人员调试工作效率,如果BUG不易复现,则情况会变得更加严重。

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

发明内容

本发明针对现有linux应用软件开发中BUG调试过程长,影响软件开发人员调试工作效率的问题,而提供一种准确、高效的BUG定位方案,能极大的降低软件开发的调试难度,显著提高软件BUG解决效率。

为了达到上述目的,本发明采用如下的技术方案:

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

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

优选的,所述分析方法中通过进程自身接管特定的信号来获取异常时的任务上下文,并按体系结构解析任务堆栈,实现对异常的分析。

优选的,所述分析方法具体包括如下步骤:

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

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

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

(4)根据异常时CPU的寄存器获取任务堆栈信息;

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

(6)输出解析后的异常信息;

(7)记录解析后的异常信息。

优选的,所述步骤(3)中CPU的体系结构为MIPS。

优选的,所述步骤(6)中通过IO系统输出解析后的异常信息。

优选的,所述步骤(7)中通过日志系统记录解析后的异常信息。

本发明通过给进程自身增加异常分析功能,使进程本身具有解析异常原因的能力,辅助开发人员调试和解决问题,从而提供一种准确高效的BUG定位手段,能极大的降低软件开发的调试难度,显著提高软件BUG解决效率。

附图说明

以下结合附图和具体实施方式来进一步说明本发明。

图1为本发明实施中获取异常函数调用关系的流程图。

具体实施方式

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

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

1.进程启动后接管要进行异常分析的信号:SIGILL、SIGBUS、SIGFPE、SIGSEGV、SIGIO信号,并重新设置信号处理程序;

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

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

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

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

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

51.从寄存器上下文的sc_pc获取pc;

52.从寄存器上下文的sc_regs[29]获取本级栈帧;

53.判断获取的pc是否合法:若合法,转入步骤(54),若不符合,结束本次分析;

54.按pc查找符号表,再把pc指向对应的函数入口;

55.分析pc处的指令是否为分配本级栈帧指令:若不是(即为叶子函数),转入步骤(56);若是(即为非叶子函数),则转入步骤(58);

56.确定上级栈帧即为本级栈帧;

57.从寄存器上下文的sc_regs[31]获取ra,并执行步骤(61);

58.计算获取上级栈帧pc指向下条指令;

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

60.获取ra;

61.pc指向ra继续分析上级栈帧,并转入步骤(53);

6.通过printf()函数输出解析后的异常信息;

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

通过上述实例可知,通过进程自身接管特定的信号来获取异常时的任务上下文,并按体系结构解析任务堆栈,实现对异常的分析,能够快速、准确的定位软件BUG。

本实例方案适用于辅助开发人员在MIPS体系结构的linux系统中调试BUG。

再者,基于上述实例方案,所有体系结构的CPU及类unix系统都能变通实现,其原理都如上所述,此处不加以赘述。

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

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号