[发明专利]故障定位的方法和装置有效

专利信息
申请号: 200810089912.5 申请日: 2008-04-09
公开(公告)号: CN101261603A 公开(公告)日: 2008-09-10
发明(设计)人: 李金虎;朱怀云 申请(专利权)人: 中兴通讯股份有限公司
主分类号: G06F11/36 分类号: G06F11/36
代理公司: 北京康信知识产权代理有限责任公司 代理人: 尚志峰;吴孟秋
地址: 518057广东省深圳市南*** 国省代码: 广东;44
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 故障 定位 方法 装置
【说明书】:

技术领域

发明涉及无内部互锁流水级的微处理器领域,并且特别地,涉及一种对无内部互锁流水级的微处理器的堆栈进行故障定位的方法和装置。

背景技术

无内部互锁流水级的微处理器(MIPS)作为三大RISC CPU(powerpc、arm、以及mips)之一,在嵌入式设备上得到广泛应用,越来越多的嵌入式程序运行于MIPS CPU之上。当应用程序因为空指针、错误指针、溢出等错误导致异常崩溃时,打印出的可供参考的信息寥寥无几。操作系统的异常处理程序里通常只是打印当前CPU的所有寄存器的值以及异常进程异常时用户空间程序指针(pc),堆栈指针(sp)的值等。

通常的定位故障的办法是先反汇编异常进程可执行文件,然后根据异常时打印的pc值去反汇编代码中查找异常发生所在的函数,然而,这种方法有存在以下问题:

第一,这种做法非常的繁琐,并且不够不直观,需要反汇编代码、查找。并且对开发人员有较高要求,很多上层业务开发人员并不熟悉这种反汇编定位故障的方法。

第二,不能解决所有问题。第一种情况是如果当前异常函数被很多函数调用,即使找到了异常函数,依然无法定位是上面哪个函数调用了以及哪个流程出了问题,实际上,定位故障是定位一条函数执行流程。第二种种情况是异常有时发生在库函数里(比如调用库函数的函数传给库函数参数错误),异常记录的pc值为库函数地址,在反汇编用户进程里是无法找到与此pc值对应的地址的。

目前,在现有技术中,尚未提出能够解决以上所述两个问题的技术方案。

发明内容

考虑到上述问题而做出本发明,为此,本发明的主要目的在于提供一种故障定位的方法和装置,以解决相关技术中故障定位繁琐、定位结果不直观、以及故障定位不准确的问题。

根据本发明的一个实施例,提供了一种故障定位方法,用于对无内部互锁流水级的微处理器的堆栈进行故障定位。

该方法包括:在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;根据获取的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。

此外,获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:确定当前堆栈指针的值;获取当前函数堆栈中存储的返回地址;确定当前函数堆栈的大小;将确定的值和大小相加,将相加的结果作为当前函数堆栈的下一个函数堆栈的栈帧地址,并将下一个函数堆栈作为当前函数堆栈。

其中,在每次获取了一个函数堆栈的栈帧中存储的函数的返回指令后,进一步包括:判断获取的返回指令所对应的函数是否在调用异常的函数体内,如果判断为是,则继续查找下个函数堆栈;否则停止查找函数堆栈。进行判断的处理具体为:获取当前获取的函数堆栈的地址,并从程序空间获取该函数堆栈的大小,并根据当前获取的函数堆栈的地址和大小判断其是否在函数体范围内。

其中,根据获取的返回指令在符号表中查找相应的函数的处理具体为:将符号表中小于并且最接近于返回地址的函数地址作为对应于该返回地址的函数地址,并根据函数地址找到相应函数。

根据本发明的另一实施例,提供了一种故障定位装置,用于对无内部互锁流水级的微处理器的堆栈进行故障定位。

该装置包括:第一获取模块,用于在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;第二获取模块,用于根据获取的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;以及根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;查找模块,用于查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。

其中,第二获取模块获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:确定当前堆栈指针的值;获取当前函数堆栈中存储的返回地址;确定当前函数堆栈的大小;将确定的值和大小相加,将相加的结果作为当前函数堆栈的下一个函数堆栈的栈帧地址,并将下一个函数堆栈作为当前函数堆栈。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中兴通讯股份有限公司,未经中兴通讯股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/200810089912.5/2.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top