嵌入式系统中进程异常跟踪定位的方法技术方案

技术编号:2828193 阅读:243 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种嵌入式系统中进程异常跟踪定位的方法,解决了目前使用异常跟踪工具中需要存储空间大,配置麻烦,需要调试版本支持的问题。本发明专利技术根据发生异常时进程的内存信息,提取出发生异常的程序地址,处理器各寄存器内容,发生异常的可执行文件名字,并且智能回溯出异常发生的函数调用顺序,调用函数的名字和所属文件,并将这些信息保存到文件,通过保存的文件,可以清楚的看到导致进程异常的函数,函数的名字,进程指针等内容,从而定位发生异常的代码位置。同时,保存的文件去掉了不必要的冗余信息,所以保存文件的体积很小,特别适用于智能手机,PDA(个人数字助理)等高端嵌入式系统中应用。

【技术实现步骤摘要】

本专利技术涉及嵌入式系统中进程的异常处理方法,特别涉及到异常进程的异常信息处理, 提取的方法。
技术介绍
在高端嵌入式系统如PDA,智能手机中,要求提供诸如文字处理,GUI界面,媒体播放器 等复杂应用,并且用户可以自行安装和卸载新的程序,比如游戏、工具等等。在传统的嵌入 式操作系统已经不能够满足需要了。因此,在高端嵌入式系统都采用如Unux操作系统,Whi(:li 操作系统这些更复杂的操作系统。,传统的嵌入式操作系统相比,这些操作系统具有以F特点1、 内核运行空间和用户程序运行空间分丌,使得用户进程的错误不会造成整个系统的崩溃,提高了系统运行的稳定性2、 不同的用户进程运行在不同的地址空间,使得^个用户程序的错误不会影响到其他用 户程序的运行,提高了系统运行的稳定性;3、 提供了虚拟地址和物理地址映射的管理,使得系统的内存访问更加安全;4、 提供复杂的文件系统支持,提供应用程序和运行库动态链接的能力,运行库和应用程 序分开,从而使得系统具备了无限升级的能力。与传统嵌入式系统-- 样,高端嵌入式系统中应用程序的丌发和调试也采用交义开发模式, 应用程序的编辑、编译都在开发主机上,在程序编译完成后,生成的可执行文件会被下载到 嵌入式系统中运行,嵌入式系统上会同时运行交叉调试代理,开发主机h的调试器通过和嵌 入式系统上的调试代理通信来控制应用程序的启动、运行和停止。在用户进程发生异常时, 常使用异常跟踪工具来跟踪和分析异常用户程序在发生异常时,操作系统内核运行一般是 会正常工作的,内核可以把用户程序发生异常的相关信息保存为文件,利用这些异常信息文 件,再结合用户程序的调试版本文件,利用异常跟踪工具(如GDB调试器的异常文件调试功 能等)就可以对发生异常的代码进行错误定位。使用异常跟踪工具,可以直接定位到发生异 常的函数源代码,得到异常发生的堆栈调用顺序,异常发生时的变量值。因此在用户程序的 开发阶段非常有用。但是,这类工具有如下缺点1、这些工具要求保存用户程序对应的调试版本,否则就不能定位到异常发生的源代码, 也不能够得到异常发生的堆栈调用顺序,因此,使用比较麻烦,尤其是在产品已经发布的情 况下,用户程序发生的异常就很难使用这种方法; 2、 应用程序和运行库是动态链接的,如果异常跟踪工具库的配置和程序运行时的库配置 不一样,也会造成无法定位异常,或错误定位的情况; 3、 这类工具都要使用操作系统在内核异常时保存的异常信息文件,而操作系统内核保存 的异常文件是发生用户程序异常时对用户程序进程的内存空间的拷贝,用户程序使用的内存 空间越大,则保存的文件也就越大,因此,操作系统内核在保存异常文件时都有 一个火小的 门限,超过门限的文件将无法保存,在开发阶段,嵌入式系统可以通过网络使用幵发主机.匕 的存储资源,这个门限可以设置相对较大,方便调试,但在产品发布后,这个门限必须设置得 相对较小,以避免影响产品的功能。由于异常文件的大小不定,会出现用户进程异常不能保 存的情况,给异常跟踪带来不便。在传统的实时嵌入式操作系统中也有针对程序执行异常的分析工具,比如在VxWorks操作 系统中使用tt(任务跟踪)工具。对于高端嵌入式操作系统来说,这类工具有如下缺点1、 首先,它们只能使用在物理地址空间运行的情况下,不能使用在高端嵌入式操作系统 中虚实地址空间分JT-的情况下使用;2、 其次,它们只能使用在应用程序与运行库做静态链接的情况下,不适用于高端嵌入式 操作系统中使用动态链接库的情况;3、 最后,它们同样要求应用程序必须是调试版本,在编译时必须带有调试信息,否则就 不能解析出函数名字。
技术实现思路
针对现有技术存在的缺陷和不足,本专利技术提供一种。为达到上述目的,本专利技术采用以下技术方案本专利技术嵌入式系统中进程异常跟踪定位的 方法,包括如下步骤步骤A,当进程发生异常时,获取发生异常的用户进程的寄存器值和相关信息;步骤B,根据所述寄存器值,使用堆栈回溯的方法找到用户进程发生异常时函数的地址, 以及调用该函数的函数序列;歩骤C,使用动态链接函数符号査找方法,根据歩骤B得到的函数地址,在相应文件的 符号表查找出函数的符号;歩骤D,将歩骤A、 B、 C得到的结果保存到异常信息文件中。优选的在所述的中,歩骤A具体为步骤A1,获取发生异常的用户进程的寄存器值,主要有程序计数寄存器值,堆栈帧寄存器值,堆栈寄存器值,程序状态寄存器值;歩骤A2,获取发生异常进程的相关信息,主要有进程的任务名字,进程标识编兮、进程的堆栈空间范围、进程的代码空间范围、进程全局变量的空间范围,进程动态分配的地址空间范围。优选的在所述的中,步骤B具体为 歩骤B1,根据步骤Ai获取的堆栈帧寄存器值找到堆栈帧,从堆栈帧找到本函数的返回 地址;歩骤B2,判断该返回地址是否是在本进程内存执行空间内的有效的可执行地址;步骤B3,如果是,以该返回地址为起点,向有效程序空间的低端搜索,搜索调用本函数的调用指令及其地址。优选的在所述的中,步骤C具体为步骤CL,根据调用指令中的偏移地址,加上调用指令本身的地址,得到在调用本函数时 的跳转地址;步骤C2,判断该跳转地址是直接跳转还是间接动态跳转步骤C3,如果是直接跳转,就直接在本执行文件中搜索函数的符号;步骤C4,如果是间接动态跳转,则查找对应于该间接跳转地址的实际跳转地址-步骤C5,査找对应该实际跳转地址的函数名宇;歩骤C6、将搜索到函数名字、函数地址、文件名字一起保存步骤C7,根据保存的堆栈帧寄存器值找到堆栈帧,从堆栈帧得到上层函数的堆栈帧地址, 更新保存的堆栈帧寄存器值;步骤C8,使用保存的堆栈帧寄存器值,判断该堆栈帧寄存器值是否在进程的堆桟空间范 围内,同时判断搜索深度是否超过了最大限制,如果堆栈帧寄存器值有效,搜索深度也没有 越界,则跳转到歩骤B继续运行,否则,跳到步骤D。优选的在所述的中,步骤C4具休为步骤C41,使用该间接动态跳转地址和操作系统提供的系统调用,找到该地址所属的可 执行文件,以及该文件在操作系统进程中的虚拟地址区域,从虚拟地址区域得到改文件在进 程内存空间中的映射偏移地址歩骤C42,使用映射偏移地址和可执行文件,得到该文件在进程内存空间中进程链接表 的入口地址;步骤C43,利用入口地址判断输入地址是否在进程链接表中;如果不是,则输入地址为直接跳转的实际跳转地址,直接返回该地址,如果是,说明输入地址是间接跳转的;歩骤C44,利用输入地址和进程链接表表项的结构就可以得到由动态链接器放置在进程链接表表项中的实际跳转地址,返回该实际跳转地址。优选的在所述的中,步骤C5具体为 步骤(:51,使用跳转指令和该指令的地址,得到该指令执行后的程序跳转地址; 步骤C52,判断该地址是否是有效的可执行地址,如果不是,退出处理,返回失败 步骤C53,如果是,以该地址为起点,向有效程序空间的低端搜索,搜索调用本函数的跳转指令及实际跳转地址,即被调用函数的入口地址;步骤C54,如果实际跳转地址是直接跳转的静态链接地址,则在当前^执行文件的符号表中搜索对应地址的函数名宇,在符号表不存在的情况F,则直接返回地址和为零的函数名字,否则返回函数地址和在符号表中搜索到的函数名字;步骤C55,如果实际跳转地址是间接跳转的动态链接地址,则找到实本文档来自技高网
...

【技术保护点】
一种嵌入式系统中进程异常跟踪定位的方法,其特征在于包括如下步骤:步骤A,当进程发生异常时,获取发生异常的用户进程的寄存器值和相关信息;步骤B,根据所述寄存器值,使用堆栈回溯的方法找到用户进程发生异常时函数的地址,以及调用该函 数的函数序列;步骤C,使用动态链接函数符号查找方法,根据步骤B得到的函数地址,在相应文件的符号表查找出函数的符号;步骤D,将步骤A、B、C得到的结果保存到异常信息文件中。

【技术特征摘要】
1. 一种嵌入式系统中进程异常跟踪定位的方法,其特征在于包括如下步骤步骤A,当进程发生异常时,获取发生异常的用户进程的寄存器值和相关信息;步骤B,根据所述寄存器值,使用堆栈回溯的方法找到用户进程发生异常时函数的地址,以及调用该函数的函数序列;步骤C,使用动态链接函数符号查找方法,根据步骤B得到的函数地址,在相应文件的符号表查找出函数的符号;步骤D,将步骤A、B、C得到的结果保存到异常信息文件中。2、 根据权利要求1所述的嵌入式系统屮进程异常跟踪定位的方法,其特征在于歩骤A具 体为步骤A1,获取发生异常的用户进程的寄存器值,主要有程序计数寄存器值,堆栈帧寄 存器值,堆栈寄存器值,程序状态寄存器值;歩骤A2,获取发生异常进程的相关信息,主要有进程的任务名字,进程标识编号、进 程的堆栈空间范围、进程的代码空间范围、进程全局变量的空间范围,进程动态分配的地址 空间范闱。3、 根据权利要求1所述的嵌入式系统中进程异常跟踪定位的方法,其特征在于歩骤B具 体为歩骤BL,根据歩骤A1获取的堆栈帧寄存器值找到堆栈帧,从堆栈帧找到本函数的返回 地址;步骤B2,判断该返回地址是否是在本进程内存执行空间内的有效的可执行地址;步骤B3,如果是,以该返回地址为起点,向有效程序空间的低端搜索,搜索调用本函数的调用指令及其地址。4、 根据权利要求1所述的嵌入式系统中进程异常跟踪定位的方法,其特征在于步骤C具体为步骤C1,根据调用指令中的偏移地址,加上调用指令本身的地址,得到在调用本函数时 的跳转地址;步骤C2,判断该跳转地址是直接跳转还是间接动态跳转步骤C3,如果是直接跳转,就直接在本执行文件中搜索函数的符号;步骤C4,如果是间接动态跳转,则査找对应于该间接跳转地址的实际跳转地址;步骤C5,查找对应该实际跳转地址的函数名字;步骤C6、将搜索到函数名字、函数地址、文件名字一起保存-歩骤C7,根据保存的堆栈帧寄存器值找到堆栈帧,从堆栈帧得到上层函数的堆栈帧地址, 更新保存的堆栈帧寄存器值;歩骤C8,使用保存的堆栈帧寄存器值,判断该堆栈帧寄存器值是否在进程的堆栈空间范 围内,同时判断搜索深度是否超过了最大限制,如果堆栈帧寄存器值有效,搜索深度也没有 越界,则跳转到步骤B继续运行,否则,跳到歩骤D。5、 根据权利要求4所述的嵌入式系统中进程异常跟踪定位的方法,其特征在于步骤01具体为步骤C41,使用该间接动态跳转地址和操作系统提供的系统调用,找到该地址所属的可 执行文件,以及该文件在操作系统进程中的虚拟地址区域,从虚拟地址区域得到该文件在进 程内存空间中的映射偏移地址;步骤C42,...

【专利技术属性】
技术研发人员:蒋鲲鹏缪敬马力
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

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

1
相关领域技术
  • 暂无相关专利