一种嵌入式系统的符号定位方法

文档序号:6562154阅读:280来源:国知局
专利名称:一种嵌入式系统的符号定位方法
技术领域
本发明涉及嵌入式系统,特别涉及嵌入式系统的符号定位。
背景技术
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁 剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专 用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系 统以及嵌入式应用程序等四大部分组成,用于实现对其他设备的控制、监 视或管理等功能。
嵌入式系统开发不同于通用的基于桌面机的程序开发。由于桌面机拥 有丰富的计算、存储和外设资源,因此程序开发、调试、测试都是在同一
台电脑上进行的;但对于嵌入式系统来说,由于系统的计算、存储和外设 资源是专门根据应用需求定制,因此用于程序开发、调试、测试的资源非 常有限,业界普遍采取主机/目标机的方式进行——在桌面机上进行程序 开发和测试,在桌面机和嵌入式系统之间建立通信通道,进行远程调试。
当嵌入式软件在程序调试阶段中发生故障的时候,开发人员可以方便 地通过功能强大的调试器准确定位故障,及时修复程序中的缺陷。但是, 当嵌入式软件在程序发布之后发生了故障,工程人员就难以用现有的工具 来定位故障。原因是在程序调试阶段运行的嵌入式軟件中包含了丰富的调 试信息,可用于支持远程调试器从目标机上获取嵌入式软件的运行期信 息;而出于效率和节省存储资源的考虑,在程序发布之后运行的嵌入式软 件已经将调试信息去掉,不能支持远程调试器的工作,导致无法有效地进 行故障定位。
有的嵌入式应用系统为了能够在程序发布之后仍然能够方便地进行 故障定位,在发布版本中加入了调试信息,但付出了时间和空间的代价。
而有的嵌入式应用系统针对这种问题提出了解决方案在程序发布阶^:去 掉了调试信息,同时输出发布版本的符号表信息文件(如MAP文件), 开发出主机端的工具分析出符号表信息文件中符号和内存地址的对应关 系,并通过运行于主机端和目标机端的调试代理建立通信通道,当嵌入式 应用软件发生故障的时候,通过符号和内存地址的对应关系简单地查看和 修改嵌入式系统中的全局变量。这类方法确实为不带调试信息的嵌入式软 件的故障定位提供了一种比较有效的手段,但故障定位往往需要获取类、 结构、函数调用栈、函数局部变量等信息,才能更为准确地定位故障,对 于这些信息的获取,上述方法就无能为力了。

发明内容
针对以上不足,本发明提出一种新的嵌入式系统的符号定位方法。该 方法适用于带有或不带有调试信息的嵌入式软件版本,不仅能提供查看和 修改全局变量的功能,还提供了获取和修改类、结构、函数调用栈、函数 局部变量等信息的功能,从而为嵌入式系统故障定位提供一种强有力的辅 助手段。
本发明采用的技术方案是
一种嵌入式系统的符号定位方法,其特征在于,所述方法包括
(1) :针对嵌入式应用软件的调试版本,生成调试版本的符号表信 息文件,此文件包含了程序中所有符号的名称和物理存储地址;然后生成 调试版本的符号类型信息文件,此文件包含了程序中所有符号的名称、类 型以及逻辑存储布局信息;
针对嵌入式应用软件的发布版本,生成发布版本的符号表信息文件, 此文件包含了程序中所有符号的名称和物理存储地址;
(2) :从调试版本的符号表信息文件获取符号名称、物理存储地址 信息,从调试版本的符号类型信息文件获取符号名称、类型、逻辑存储布 局信息;然后以符号名称作为关键字,在符号名称、物理存储地址、类型、 逻辑存储布局信息之间建立起关联关系,生成调试版本的符号类型信息数
据库;
从发布版本的符号表信息文件获取符号名称、物理存储地址信息,从 调试版本的符号类型信息文件获取符号名称、类型、逻辑存储布局信息; 然后以符号名称作为关^l走字,在符号名称、物理存储地址、类型、逻辑存 储布局信息之间建立起关联关系,生成发布版本的符号类型信息数据库;
(3) :建立起主机端和目标机端之间的通信通道;根据目标机端的 嵌入式应用系统的运行版本,以及需要查看或者修改的符号名称,查询相 应版本的符号类型信息数据库,将类型结构分解成起始物理地址和类型长 度信息,从而获取所述符号在目标机端的物理位置。
进一步地,所述符号包括全局符号和静态符号。
进一步地,所述符号至少包括结构、类、函数调用栈、局部变量和全 局变量。
进一步地,所述调试版本带有调试信息,发布版本不带有调试信息。
进一步地,所述符号表信息文件为MAP文件。
进一步地,步骤(1)前还存在步骤(0):在编译嵌入式应用软件的 目标代码过程中,分别生成调试版本和发布版本。
进一步地,当查询符号数值时,在所述步骤(3)后还存在
(4) :通过调试代理从目标机端查询内存数据并返回到主机端;主 机端根据相应符号在符号类型信息数据库中的类型逻辑存储布局,将查询 返回的内存数据按照对应的逻辑存储布局进行数据解析,得到相应数值。
本发明的技术方案适用于对带有或不带有调试信息的嵌入式软件版 本实现在目标机端的符号定位,为嵌入式应用系统的发布提供了灵活的选 择空间。使用该发明不仅可以查询和修改全局变量,而且能够详细地查询 和修改结构、类、函数、局部变量等信息,从而为嵌入式应用系统提供更 为丰富的故障定位辅助方法。本发明的技术方案不受任何编译器、调试器、 操作系统的限制,可以应用在运行各种不同操作系统的嵌入式系统,具有 广泛的应用范围。


图1是实施例1中查询符号数值的工作流程图; 图2实施例代码片断示意图; 图3符号表信息文件片断示意图; 图4符号类型信息文件片断示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图以及例 子来详细解析本发明的实施步骤。
实施例1,在pSOS嵌入式实时操作系统环境下实施,首先编写测试 例子代码,如图2所示,设计一个简单的测试类MyTestClass,该类有一 个私有整型变量i, 一个构造函数和一个析构函数,以及一个用来设置变 量i的公有成员函数Setl;定义一个全局对象实例g—mytest,在主函数中 调用测试函数test,将私有变量i的值设置为Oxfeedfeed;然后使用基于本 发明的技术方案所开发的故障诊断工具查看g—mytest的数据,检验全局对 象g—mytest数据的正确性,同时可以查看root任务的函数堆栈,检验函 数、局部变量、任务调用栈的正确性,具体实施步骤如下,参见图1:
101:在pSOS集成开发环境下,使用diab编译器分别编译出测试代 码的调试版本和发布版本一一使用编译选项-g可以编译出带有调试信息 的调试版本debug.elf,而去掉选项-g并增加优化选项-02可以生成不带调 试信息的发布版本release.df。
102:为调试版本生成符号表信息文件,比如MAP文件,和符号类型 信息文件;为发布版本生成符号表信息文件。由于调试版本中包含的调试 信息遵循一定业界标准,所以可以通过多种方法获取符号表信息和符号类 型信息,下面列举其中一种方法使用pSOS集成开发环境下的调试信息 提取工具ddump,净丸4亍命令ddump -Nx debug.elf > symbol_debug.txt,为调 试版本生成符号表信息文件,参见图3的符号表信息文件片断示意图;执 行命令ddump -D debug.elf > typeinfo.txt,为调试版本和发布版本生成符号
类型信息文件,参见图4的符号类型信息文件片断示意图;执行命令ddump -Nx release.elf > symbol_release.txt,为发布版本生成符号表信息文件。
103:在符号名称、物理存储地质、类型、逻辑存储布局等信息间建 立起关联关系,生成符号类型信息数据库。可以通过多种方式根据第二步 产生的符号表信息文件和符号类型信息文件生成符号类型信息数据库,下 面列举其中一种方法通过对符号信息文件的分析,将物理存储地址301、 类型长度302以及符号名称303信息提取出来,按照一定格式存放到一个 临时文件templ.dat中。同时分析符号类型信息文件,参见图4,全局对 象名称为401所示的"g_mytest,,,通过代码411的引用,可以找到该全 局对象对应的类型,类型名称为402所示的"MyTestClass",该类型的 第一个成员是403所示的变量"i",其逻辑存储位置是MyTestClass类型 起始偏移位置0,那么可以推算出变量"i,,的物理存储地址是g—mytest 的物理存储地址+偏移0, MyTestClass类型的第二个成员变量可以通过代 码412的引用来搜索,如此类推,可以分析出MyTestClass类型的逻辑存 储布局,按照一定格式将提取到的信息存放到一个临时文件temp2.dat中。 对于函数类型的分析,这里以MyTestClass类型的公有成员函数Setl为例, 404所示的是函数名称,该函数的代码段地址范围从AT—low_pc到 AT_high_pc所指示的地址,405所示的是函数的第一个参数,参数名是 "this",改参数存储在421所示的R3寄存器中,同样,406所示的参数 "value"存储在422所示的R4寄存器当中,这样就可以将所提取出来的 信息暂时存放在临时文件temp2.dat中。然后,以符号名称为关键字,在 templ.dat和temp2.dat之间建立关系,生成符号类型信息数据库,提供给 故障i貪断工具查询^f吏用。
104:当测试程序的发布版本下栽到目标机运行起来之后,通过网络 将主机端的故障诊断工具连接上目标机,使主机端和目标机端的调试代理 建立起通信通道,就可以使用故障诊断工具查看或修改测试对象的数据。 将需要查询的全局符号名称g一mytest输入到主机端的故障诊断工具中,工 具以符号名称g—mytest为关键字查询符号类型信息数据库,获取该符号的 物理存储地址和类型长度,构造一条全局符号查询请求消息,通过调试代
理下发到目标机,目标机端的调试代理提取出请求消息的物理存储地址
address和长度length两个参数,并激活查询任务,将address开始的长度 为length的内存数据拷贝下来,并通过调试代理发送到主机端;主机端的 故障诊断工具接收到查询结果后,查询符号类型信息数据库获取g—mytest 类型的逻辑存储布局,解析查询返回的内存数据,然后显示到用户界面上。 接着检验函数、局部变量、任务调用栈的正确性,将root任务的名称输入 到主机端的故障诊断工具中,工具构造一条堆栈查询请求消息,通过调试 代理下发到目标机,目标机端的调试代理激活查询任务,将root任务栈数 据返回到主机端,主机端的故障诊断工具通过分析堆栈结构,提取出堆栈 中函数调用链的地址列表,以这个地址列表中的每一个地址作为关键字, 查询符号类型数据库中的函数地址范围信息,每成功匹配一次,则输出该 地址范围所对应的函数名称,并根据符号类型数据库中该函数所对应的局 部变量的逻辑存储布局,解析堆栈中的数据,输出局部变量的值,如此类 推,可以输出root任务的整个函数调用链以及每个函数的参数和局部变量 的值。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的 普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进 和润饰,这些改进和润饰应视为本发明的保护范围。
权利要求
1.一种嵌入式系统的符号定位方法,其特征在于,所述方法包括(1)针对嵌入式应用软件的调试版本,生成调试版本的符号表信息文件,此文件包含了程序中所有符号的名称和物理存储地址;然后生成调试版本的符号类型信息文件,此文件包含了程序中所有符号的名称、类型以及逻辑存储布局信息;针对嵌入式应用软件的发布版本,生成发布版本的符号表信息文件,此文件包含了程序中所有符号的名称和物理存储地址;(2)从调试版本的符号表信息文件获取符号名称、物理存储地址信息,从调试版本的符号类型信息文件获取符号名称、类型、逻辑存储布局信息;然后以符号名称作为关键字,在符号名称、物理存储地址、类型、逻辑存储布局信息之间建立起关联关系,生成调试版本的符号类型信息数据库;从发布版本的符号表信息文件获取符号名称、物理存储地址信息,从调试版本的符号类型信息文件获取符号名称、类型、逻辑存储布局信息;然后以符号名称作为关键字,在符号名称、物理存储地址、类型、逻辑存储布局信息之间建立起关联关系,生成发布版本的符号类型信息数据库;(3)建立起主机端和目标机端之间的通信通道;根据目标机端的嵌入式应用系统的运行版本,以及需要查看或者修改的符号名称,查询相应版本的符号类型信息数据库,将类型结构分解成起始物理地址和类型长度信息,从而获取所述符号在目标机端的物理位置。
2. 如权利要求1所述的方法,其特征在于所述符号包括全局符号 和静态符号。
3. 如权利要求l所述的方法,其特征在于所述符号至少包括结构、 类、函数调用栈、局部变量和全局变量。
4. 如权利要求l、 2或3所述的方法,其特征在于所述调试版本带 有调试信息,发布版本不带有调试信息。
5. 如权利要求4所述的方法,其特征在于所述符号表信息文件为 MAP文件。
6. 如权利要求l、 2、 3或5所述的方法,其特征在于,步骤(1)前 还存在步骤(0):在编译嵌入式应用软件的目标代码过程中,分别生成 调试版本和发布版本。
7. 如权利要求1所述的方法,其特征在于,当查询符号数值时,在 所述步骤(3)后还存在(4):通过调试代理从目标机端查询内存数据并返回到主机端;主 ^L端根据相应符号在符号类型信息数据库中的类型逻辑存储布局,将查询 返回的内存数据按照对应的逻辑存储布局进行数据解析,得到相应数值。
全文摘要
一种嵌入式系统的符号定位方法,包括(1)生成调试版本的符号表信息文件和符号类型信息文件、以及发布版本的符号表信息文件(2)以符号名称作为关键字生成调试版本和发布版本的符号类型信息数据库;(3)根据符号名称查询符号类型信息数据库,将类型结构分解,得到符号在目标机中的物理位置。本发明适用于对各种嵌入式软件版本实现在目标机端的符号定位,为嵌入式应用系统的发布提供了灵活的选择空间。使用该发明不仅可以查询和修改全局变量,而且能够查询和修改结构、类、函数、局部变量等信息,从而为嵌入式应用系统提供丰富的故障定位辅助方法。本发明不受任何编译器、调试器、操作系统的限制。
文档编号G06F11/36GK101178684SQ200610138219
公开日2008年5月14日 申请日期2006年11月6日 优先权日2006年11月6日
发明者巍 李, 李小伟, 黄海伦 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1