[发明专利]一种用户态实现X86架构设备异常栈回溯的方法在审
申请号: | 201510479893.7 | 申请日: | 2015-08-07 |
公开(公告)号: | CN105468516A | 公开(公告)日: | 2016-04-06 |
发明(设计)人: | 高福亮 | 申请(专利权)人: | 汉柏科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 300384 天津市南开*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 用户 实现 x86 架构 设备 异常 回溯 方法 | ||
技术领域
本发明涉及网络通信技术领域,尤其涉及一种用户态实现X86架构设备异常栈回溯的方法。
背景技术
在现有技术中,程序运行出现问题很正常,那么能在程序运行异常时保存第一现场信息非常重要,linux内核有异常栈的回溯实现,内核出现异常时会直接打印异常信息;用户态程序调试可以使用gdb非常强大的调试功能,研发人员在程序调试时一般会编译可调试版本,但出厂的硬件设备(如交换机、安全网关等)都是非调试版本的,这样的出厂版本是没有办法gdb调试的,并且设备在外使用出现问题研发人员不可能立马到现场进行调试,因此需要提出一种非调试版本设备出现问题后及时记录异常信息的方法,以备后续开发人员查看及定位问题原因。
发明内容
为了及时记录程序的异常信息,本发明提出了一种用户态实现X86架构设备异常栈回溯的方法,具体方案如下:
一种用户态实现X86架构设备异常栈回溯的方法,其特征在于,所述方法包括:
在用户态程序的Makefile中添加编译选项-fnoomit-frame-pointer和-rdynamic;
在用户态增加SIGSEGV信号量处理函数x86_debug,其中所述处理函数x86_debug能够打印程序运行异常时的信息;
将程序运行异常时的打印信息都保存在存储介质中。
优选的,其特征在于,所述处理函数x86_debug具体为:
记录程序异常发生的时间;
打印X86设备的硬件寄存器信息;
打印X86异常数据栈的信息;
打印X86异常函数的调用关系。
优选的,其特征在于,所述打印X86设备的硬件寄存器信息,具体为:
打印x86sigcontext数据结构的所有变量。
优选的,其特征在于,所述打印X86异常数据栈的信息,具体为:
打印esp到esp+512字节空间的数据内容,其中所述esp是X86硬件寄存器的堆栈指针。
优选的,其特征在于,所述打印X86异常函数的调用关系,具体为:
根据X86硬件寄存器的ebp和eip,循环利用eip找到异常函数调用关系,并利用backtrace_symbols函数将调用函数地址转换为函数名称后打印,其中所述ebp为基址指针,所述eip为指令指针。
本发明通过用户态程序运行出现异常时(如访问空指针)打印X86硬件寄存器、异常栈信息及异常函数调用关系,并将所有信息保存到存储介质中(如硬盘、CF卡、Flash卡等),作为设备的黑匣子信息保存出现问题的现场,便于快速定位问题原因,及时找到解决问题办法。
附图说明
图1为本发明提供的一种用户态实现X86架构设备异常栈回溯的方法示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他的实施例,都属于本发明保护的范围。
图1示出了本发明提供的一种用户态实现X86架构设备异常栈回溯的方法示意图,具体方法如下所述:
1、在用户态程序的Makefile中添加编译选项-fnoomit-frame-pointer和-rdynamic。
具体的,对linux用户态程序的Makefile进行编译,在其中添加编译选项-fnoomit-frame-pointer和-rdynamic,这样可以保证用户态程序能够支持栈回溯信息及函数地址与函数名称的转换。
2、在用户态增加SIGSEGV信号量处理函数x86_debug,其中所述处理函数x86_debug能够打印程序运行异常时的信息。
由于在linux用户态增加SIGSEGV信号量处理函数x86_debug,因此在程序运行异常时会自动调用处理函数x86_debug函数。
所述处理函数x86_debug具体为:
记录程序异常发生的时间;
打印X86设备的硬件寄存器信息,具体为打印x86sigcontext数据结构的所有变量;
打印X86异常数据栈的信息,具体为打印esp到esp+512字节空间的数据内容,其中所述esp是X86硬件寄存器的堆栈指针;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于汉柏科技有限公司,未经汉柏科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510479893.7/2.html,转载请声明来源钻瓜专利网。