程序运行异常时的数据获取方法、装置、终端及存储介质制造方法及图纸

技术编号:24090532 阅读:16 留言:0更新日期:2020-05-09 07:52
本发明专利技术公开了一种程序运行异常时的数据获取方法、装置、终端及存储介质,所述方法包括:当程序出现异常运行状态时,获取所述程序中与所述异常运行状态中所对应的函数之间的调用关系数据;获取所述程序中与所述异常运行状态中所对应的函数的内存数据。本发明专利技术中通过获取程序中出现的异常运行状态,并进一步获取异常运行状态对应的函数的调用关系数据以及内存数据,以便根据保存的数据来解决异常,可见本发明专利技术无需对所有的函数的相关数据都进行保存,简化了流程,节省了资源的占用。

Data acquisition method, device, terminal and storage medium in case of abnormal program operation

【技术实现步骤摘要】
程序运行异常时的数据获取方法、装置、终端及存储介质
本专利技术涉及数据获取
,尤其涉及的是一种程序运行异常时的数据获取方法、装置、终端及存储介质。
技术介绍
随着现代程序的代码规模和业务复杂度不断的增加,迫切需要一种能够准确获取程序运行发生错误时的相关内存数据和定位代码的手段,来达到快速解决复杂程序运行错误的目的。特别是嵌入式环境下的程序,系统资源和调试工具的不足更要求该手段满足简单、易实现、资源占用低的要求。现有linux内核的coredump调试技术(当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,该技术即为coredump调试技术),会无差别的保存程序运行中的所有内存数据,占用大量的存储空间,且不适用于嵌入式系统环境。因此,现有技术还有待改进和发展。
技术实现思路
本专利技术要解决的技术问题在于,针对现有技术的上述缺陷,提供一种程序运行异常时的数据获取方法、装置、终端及存储介质,旨在解决现有技术中当程序出现异常时,会无差别的保存程序运行中的所有内存数据,占用大量的存储空间的问题。本专利技术解决技术问题所采用的技术方案如下:第一方面,本专利技术提供一种程序运行异常时的数据获取方法,其中,所述方法包括:当程序出现异常运行状态时,获取所述程序中与所述异常运行状态中所对应的函数之间的调用关系数据;获取所述程序中与所述异常运行状态中所对应的函数的内存数据。在一种实施方式中,所述获取所述程序中与所述异常运行状态中所对应的函数的内存数据,包括:获取所述异常运行状态,并对所述异常运行状态进行解析,得到与所述异常运行状态所对应的函数;从所述函数中获取被调用函数以及调用者函数之间的调用关系数据。在一种实施方式中,所述从所述函数中获取被调用函数以及调用者函数之间的调用关系数据,包括:获取被调用函数的栈帧地址,从所述被调用函数的所述栈帧地址中获取调用者函数的指令地址;从调用者函数的指令地址中获取调用者函数的申请栈帧长度,得到获取被调用函数以及调用者函数之间的调用关系数据。在一种实施方式中,所述获取所述程序中与所述异常运行状态中所对应的函数的内存数据,包括:获取所述函数所对应的栈帧地址,并从所述栈帧地址中获取内存数据。在一种实施方式中,所述从所述栈帧地址中获取内存数据,包括:从所述被调用函数的栈帧地址中获取所述被调用函数的内存数据;获取调用者函数的栈帧地址,并从所述调用者函数的栈帧地址中获取所述调用者函数的内存数据。在一种实施方式中,所述调用者函数的栈帧地址为所述调用者函数的申请栈帧长度加上所述被调用函数的栈帧地址。在一种实施方式中,所述得到获取被调用函数以及调用者函数之间的调用关系数据之后,包括:重复执行所述获取被调用函数的栈帧地址,从所述被调用函数的所述栈帧地址中获取调用者函数的指令地址,以及从调用者函数的指令地址中获取调用者函数的申请栈帧长度的步骤,直至找出所有的函数之间的调用关系数据。第二方面,本专利技术还提供一种程序运行异常时数据获取装置,其中,所述装置包括:第一获取单元,用于当程序出现异常运行状态时,获取所述程序中与所述异常运行状态中所对应的函数之间的调用关系数据;第二获取单元,用于获取所述程序中与所述异常运行状态中所对应的函数的内存数据。第三方面,本专利技术还提供一种终端,其特征在于,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于执行上述方案中任意一项所述的方法。第四方面,本专利技术还提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述方案中任意一项所述的方法。本专利技术的技术效果:本专利技术中通过获取程序中出现的异常运行状态,并进一步获取异常运行状态对应的函数的调用关系数据以及内存数据,以便根据保存的数据来解决异常,可见本专利技术无需对所有的函数的相关数据都进行保存,简化了流程,节省了资源的占用。附图说明图1是本专利技术提供的程序运行异常时的数据获取方法的流程图。图2是本专利技术提供的程序运行异常时的数据获取方法的具体应用时的第一流程图。图3是本专利技术提供的程序运行异常时的数据获取方法的具体应用时的第二流程图。图4是本专利技术实施例提供的程序运行异常时的数据获取装置的原理框图。图5是本专利技术实施例提供的终端的内部结构原理框图。具体实施方式为使本专利技术的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本专利技术进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。需要说明,若本专利技术实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则所述方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果所述特定姿态发生改变时,则所述方向性指示也相应地随之改变。另外,若本专利技术实施例中有涉及“第一”、“第二”等的描述,则所述“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个所述特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本专利技术要求的保护范围之内。为了解决现有技术中当程序出现异常时,会无差别的保存程序运行中的所有内存数据,占用大量的存储空间的问题。本实施例提供一种本专利技术提供的程序运行异常时的数据获取方法,如图1中所示,所示方法包括以下步骤:步骤S100、当程序出现异常运行状态时,获取所述程序中与所述异常运行状态中所对应的函数之间的调用关系数据;步骤S200、获取所述程序中与所述异常运行状态中所对应的函数的内存数据。在本实施例中,当程序在运行过程中出现异常运行状态时,对所述异常运行状态进行获取的,然后对获取到的异常运行状态进行解析,从而得到与所述异常运行状态所对应的函数。由于程序中函数中包含有被调用函数以及调用者函数,因此在程序发生异常时,需要进一步地从所述函数中获取被调用函数以及调用者函数之间的调用关系数据,并从所述被调用函数以及调用者函数中获取到相关的内存数据,从而实现在程序发生异常时对于数据的获取,以便可针对获取到的数据来对异常运行状态进行分析与解决。由于程序的函数调用过程都会执行两条特殊的指令,第一条特殊指令是给被调用函数(fa)申请栈帧地址,该栈帧地址中保存有被调用函数(fa)运行时的内存数据;第二条特殊指令是保存调用者函数(fb)的指令地址到被调用函数(fa)的栈帧地址中,以便被调用函数(fa)执行完毕后返回到调本文档来自技高网...

【技术保护点】
1.一种程序运行异常时的数据获取方法,其特征在于,所述方法包括:/n当程序出现异常运行状态时,获取所述程序中与所述异常运行状态中所对应的函数之间的调用关系数据;/n获取所述程序中与所述异常运行状态中所对应的函数的内存数据。/n

【技术特征摘要】
1.一种程序运行异常时的数据获取方法,其特征在于,所述方法包括:
当程序出现异常运行状态时,获取所述程序中与所述异常运行状态中所对应的函数之间的调用关系数据;
获取所述程序中与所述异常运行状态中所对应的函数的内存数据。


2.根据权利要求1所述的程序运行异常时数据获取方法,其特征在于,所述获取所述程序中与所述异常运行状态中所对应的函数的内存数据,包括:
获取所述异常运行状态,并对所述异常运行状态进行解析,得到与所述异常运行状态所对应的函数;
从所述函数中获取被调用函数以及调用者函数之间的调用关系数据。


3.根据权利要求1所述的程序运行异常时数据获取方法,其特征在于,所述从所述函数中获取被调用函数以及调用者函数之间的调用关系数据,包括:
获取被调用函数的栈帧地址,从所述被调用函数的所述栈帧地址中获取调用者函数的指令地址;
从调用者函数的指令地址中获取调用者函数的申请栈帧长度,得到获取被调用函数以及调用者函数之间的调用关系数据。


4.根据权利要求3所述的程序运行异常时数据获取方法,其特征在于,所述获取所述程序中与所述异常运行状态中所对应的函数的内存数据,包括:
获取所述函数所对应的栈帧地址,并从所述栈帧地址中获取内存数据。


5.根据权利要求4所述的程序运行异常时数据获取方法,其特征在于,所述从所述栈帧地址中获取内存数据,包括:
从所述被调用函数的栈帧地址中获取所述被调用函数的内存数...

【专利技术属性】
技术研发人员:向卫东孟庆晓吴闽华
申请(专利权)人:深圳震有科技股份有限公司
类型:发明
国别省市:广东;44

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

1