一种用户态实现ARM架构设备异常栈回溯的方法技术

技术编号:13131214 阅读:60 留言:0更新日期:2016-04-06 16:41
本发明专利技术提供一种用户态实现ARM架构设备异常栈回溯的方法,所述方法包括:在用户态程序的Makefile中添加编译选项-fnoomit-frame-pointer和-rdynamic;在用户态增加SIGSEGV信号量处理函数arm_debug,其中所述处理函数arm_debug能够打印程序运行异常时的信息;将程序运行异常时的打印信息都保存在存储介质中。本发明专利技术通过用户态程序运行出现异常时打印ARM硬件寄存器、异常栈信息及异常函数调用关系,并将所有信息保存到存储介质中,便于快速定位问题原因,及时找到解决问题办法。

【技术实现步骤摘要】

本专利技术涉及网络通信
,尤其涉及一种用户态实现ARM架构设备异常栈回溯的方法
技术介绍
在现有技术中,程序运行出现问题很正常,那么能在程序运行异常时保存第一现场信息非常重要,linux内核有异常栈的回溯实现,内核出现异常时会直接打印异常信息;用户态程序调试可以使用gdb非常强大的调试功能,研发人员在程序调试时一般会编译可调试版本,但出厂的硬件设备(如交换机、安全网关等)都是非调试版本的,这样的出厂版本是没有办法gdb调试的,并且设备在外使用出现问题研发人员不可能立马到现场进行调试,因此需要提出一种非调试版本设备出现问题后及时记录异常信息的方法,以备后续开发人员查看及定位问题原因。
技术实现思路
为了及时记录程序的异常信息,本专利技术提出了一种用户态实现ARM架构设备异常栈回溯的方法,具体方案如下:一种用户态实现ARM架构设备异常栈回溯的方法,其特征在于,所述方法包括:在用户态程序的Makefile中添加编译选项-fnoomit-frame-pointer和-rdynamic;在用户态增加SIGSEGV信号量处理函数arm_debug,其中所述处理函数arm_debug能够打印程序运行异常时的信息;将程序运行异常时的打印信息都保存在存储介质中。优选的,其特征在于,所述处理函数arm_debug具体为:记录程序异常发生的时间;打印ARM设备的硬件寄存器信息;打印ARM异常数据栈的信息;打印ARM异常函数的调用关系。优选的,其特征在于,所述打印ARM设备的硬件寄存器信息,具体为:打印ARMsigcontext数据结构的所有变量。优选的,其特征在于,所述打印ARM异常数据栈的信息,具体为:打印arm_fp到arm_fp+512字节空间的数据内容,其中所述arm_fp是异常栈中的栈指针。优选的,其特征在于,所述打印ARM异常函数的调用关系,具体为:根据ARM架构回溯结构及满栈降序的特点,循环利用arm_lr找到异常函数调用关系,并利用backtrace_symbols函数将调用函数地址转换为函数名称后打印,其中所述arm_lr是连接寄存器。本专利技术通过用户态程序运行出现异常时(如访问空指针)打印ARM硬件寄存器、异常栈信息及异常函数调用关系,并将所有信息保存到存储介质中(如硬盘、CF卡、Flash卡等),作为设备的黑匣子信息保存出现问题的现场,便于快速定位问题原因,及时找到解决问题办法。附图说明图1为本专利技术提供的一种用户态实现ARM架构设备异常栈回溯的方法示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他的实施例,都属于本专利技术保护的范围。图1示出了本专利技术提供的一种用户态实现ARM架构设备异常栈回溯的方法示意图,具体方法如下所述:1、在用户态程序的Makefile中添加编译选项-fnoomit-frame-pointer和-rdynamic。具体的,对linux用户态程序的Makefile进行编译,在其中添加编译选项-fnoomit-frame-pointer和-rdynamic,这样可以保证用户态程序能够支持栈回溯信息及函数地址与函数名称的转换。2、在用户态增加SIGSEGV信号量处理函数arm_debug,其中所述处理函数arm_debug能够打印程序运行异常时的信息。由于在linux用户态增加SIGSEGV信号量处理函数arm_debug,因此在程序运行异常时会自动调用处理函数arm_debug函数。所述处理函数arm_debug具体为:记录程序异常发生的时间;打印ARM设备的硬件寄存器信息,具体为打印ARMsigcontext数据结构的所有变量;打印ARM异常数据栈的信息,具体为打印arm_fp到arm_fp+512字节空间的数据内容,其中所述arm_fp是异常栈中的栈指针(fp:framepointer);打印ARM异常函数的调用关系,具体为根据ARM架构回溯结构及满栈降序的特点,循环利用arm_lr找到异常函数调用关系,并利用backtrace_symbols函数将调用函数地址转换为函数名称后打印,其中所述arm_lr是连接寄存器(lr:linkregister),用于保存子程序的返回地址。3、将程序运行异常时的打印信息都保存在存储介质中。这样研发人员即可通过命令调用查看,并根据异常的现场信息进行定位,找到问题原因,然后想到解决办法,便于问题快速定位解决。最后应说明的是:以上各实施例仅用以说明本专利技术的技术方案,而非对其限制;尽管参照前述各实施例对本专利技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本专利技术权利要求所限定的范围。本文档来自技高网...

【技术保护点】
一种用户态实现ARM架构设备异常栈回溯的方法,其特征在于,所述方法包括:在用户态程序的Makefile中添加编译选项‑fnoomit‑frame‑pointer和‑rdynamic;在用户态增加SIGSEGV信号量处理函数arm_debug,其中所述处理函数arm_debug能够打印程序运行异常时的信息;将程序运行异常时的打印信息都保存在存储介质中。

【技术特征摘要】
1.一种用户态实现ARM架构设备异常栈回溯的方法,其特征在于,所述方法包括:
在用户态程序的Makefile中添加编译选项-fnoomit-frame-pointer和-rdynamic;
在用户态增加SIGSEGV信号量处理函数arm_debug,其中所述处理函数arm_debug能够打印程序运行异常时的信息;
将程序运行异常时的打印信息都保存在存储介质中。
2.根据权利要求1所述的方法,其特征在于,所述处理函数arm_debug具体为:
记录程序异常发生的时间;
打印ARM设备的硬件寄存器信息;
打印ARM异常数据栈的信息;
打印ARM异常函数的调用关系。
3.根据权利要...

【专利技术属性】
技术研发人员:高福亮
申请(专利权)人:汉柏科技有限公司
类型:发明
国别省市:天津;12

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

1