嵌入式系统的调试方法

文档序号:6572174阅读:436来源:国知局
专利名称:嵌入式系统的调试方法
技术领域
本发明涉及一种嵌入式系统的调试方法,尤其是一种对开发语言 分层的嵌入式系统的调试方法。
背景技术
随着电子技术的发展,嵌入式系统已经广泛应用在电子通信、自 动控制等领域。随着嵌入式系统的发展,其运算速度越来越快,存储 容量也越来越大,在嵌入式系统中运行的程序也越来越庞大且更加复 杂,程序运行时出现错误或缺陷几乎是不可避免的。因此,嵌入式系 统中运行的程序编写完毕后,需要进行调试,以便发现并消除缺陷。现有的部分嵌入式系统运行的程序由两种不同的语言开发,如图1所示。现有的嵌入式系统运行的程序包括上层应用文件24和下层 基础文件25,其中上层应用文件24由高级语言,如Java语言编写 而成。用户编写上层应用文件24后将其编译,并下载到嵌入式系统 中,此时上层应用文件24以字节码的形成存储在嵌入式系统中。上 层应用文件24 —条指令经过编译后,往往生成多个字节码,而字节 码的长度不一定相同,且均有唯一的起止地址。下层基础文件25由能够被编译成机器指令的语言,如C语言编 写而成,其运行速度较快。程序运行时,下层基础文件25逐一解释 并执行上层应用文件24的字节码。并且,下层基础文件25有一虚拟 的PC (Program Counter,程序计数器)指针,该虚拟PC指针存储 有当前执行字节码的地址,即指向当前执行的字节码。使用语言分层的技术开发嵌入式系统,虽然给软件开发带来巨大 的方便,但给程序的调试带来麻烦。现有的调试系统只能对上层应用 文件或下层基础文件进行单独调试,这样被调试程序无法在最真实的 环境下运行,并且给下层基础文件的调试带来很大的不便。发明内容本发明的主要目的是提供一种可同时对被调试程序的上层应用文 件和下层基础文件调试的嵌入式系统调试方法。为实现上述的主要目的,本发明提供的嵌入式系统调试方法应用 在一嵌入式系统调试系统中,该嵌入式系统与调试终端连接,该嵌入 式系统包括调试模块,用于接收调试终端发出的命令并对被调试程序 进行调试。调试终端包括用户接口模块、调试信息模块及执行调试命令的执行模块,该调试方法包括以下步骤步骤一编写被调试程序,该被调试程序包括上层应用文件及下 层基础文件,并在下层基础文件中添加默认断点,将被调试程序编译 后下载到嵌入式系统中。其中,下层基础文件由能够被编译成机器指 令的语言,如C语言编写而成,而上层应用文件是由高级语言,如 Java语言编写而成,且编译后以字节码的形式存储在嵌入式系统 中。步骤二在嵌入式系统中运行被调试程序,此时下层基础文件将 逐一解释并执行上层应用文件编译后生成的字节码,当被调试程序运行至断点时暂停运行。步骤三调试终端查看和/或修改被调试程序的运行信息,判断 是否需要在被调试程序的上层应用文件中添加断点。若需要,由用户接口模块设置需要设定断点的信息,如需要设置 断点的源文件名、断点设置的行数等,并将该信息传送到调试信息模 块及执行模块。调试信息模块接收到该信息后,找出对应字节码的起 始地址,并传送至执行模块。执行模块接收到该地址后,设置条件断 点应当满足的条件。其中,该条件断点是设置在下层基础文件中。若不需要添加断点,则执行下一步。步骤四调试模块向被调试程序发送继续运行的命令,被调试程 序继续运行。步骤五若被调试程序遇到条件断点,则返回执行步骤二,否 则,继续运刊"陂调试程序,直至嵌入式系统断电结束。由于被调试程序在嵌入式系统中运行时,下层基础文件是逐一解 释并执行上层应用文件编译而成的字节码,因此,当下层基础文件运行时遇到条件断点暂停运行时,上层应用文件也无法运行,即此时上 层应用文件及下层基础文件均暂停运行,调试人员即可方便的查看被 调试程序的运行状况,并判断被调试程序运行是否出现问题,或者是 否需要改变运行环境等。这样,调试人员即可同时对上层应用文件和 下层基础文件同时进行调试,使得被调试程序在最真实的运行环境中 运行,有利于调试人员进行调试工作。


图1是现有嵌入式系统中被调试程序结构的示意框图;图2是要应用本发明嵌入式系统调试方法的调试系统结构示意框图;图3是本发明嵌入式系统在线调试方法实施例的流程图;图4是本发明嵌入式系统在线调试方法实施例中添加断点的流程图;图5是本发明嵌入式系统在线调试方法实施例中第一类单步运行 的流程图;图6是本发明嵌入式系统在线调试方法实施例中第二类单步运行 的流程图。以下结合附图及实施例对本发明作进一 步说明。
具体实施方式
参见图2,图2是要应用本发明嵌入式系统调试方法的调试系统 结构示意框图。调试系统包括相互连接的调试终端1和嵌入式系统 2,其中调试终端1包括用户接口模块11、调试信息模块12和执行 模块13,而嵌入式系统2包括调试模块21和被调试程序22,被调试 程序22包括上层应用文件24和下层基础文件25,上层应用文件24 和下层基础文件25均经过编译后下载到嵌入式系统2中,且上层应 用文件编译后以字节码的形式存储在嵌入式系统2中,下层基础文件 25有一虛拟的PC指针指向当前执行的字节码,这些与现有的被调试 程序相同,在此不再赘述。在调试终端1中,用户接口模块11是调试终端1与调试人员的 接口界面,用于接收和解释调试人员设置的调试命令,包括添加断 点、查看某一参数的值、查看某一函数在被调试程序中的调用关系等 等。同时,用户接口模块11还显示被调试程序当前运行的状态,如 上层应用文件的程序源代码等信息。调试信息^f莫块12可通过被调试程序22上层应用文件24和下层 基础文件25编译时生成的符号表等调试信息,获取变量类型、变量 地址、函数地址起止范围、上层应用文件的源代码对应字节码的起始 地址等信息,并根据用户接口模块11发出的信息向执行模块13提供 相应的信息。执行模块13根据用户接口模块11、调试信息模块12发出的信 息,向嵌入式系统2的调试模块21发出相应的调试命令,如查看和 修改某一变量的值、添加断点等。嵌入式系统2的调试模块21可接收并执行调试终端1执行模块 13发出的命令,也就是对被调试程序22进行操作,并在执行相关操 作后将操作结果信息传送回执行模块13,执行模块13即将结构传送 至用户接口模块11,并由用户接口模块ll反映给调试人员。参见图3,图3是本发明嵌入式系统在线调试方法实施例的流程 图。应用本发明对嵌入式系统调试时,首先编写程序,该程序由上层 应用文件和下层基础文件组成。其中,上层应用文件由Java等高级 语言编写而成,下层基础文件由C等能够被编译成机器指令的语言编 写而成。编写程序时,调试人员应该在下层基础文件中设置一个默认 断点,让被调试程序在运行到该断点时进入中断状态。然后,对被调 试程序进行编译,上层应用文件即被编译成字节码。接着,调试人员 将编译后的被调试程序下载到嵌入式系统中(步骤Sl),调试工作 准备完毕。下载被调试程序后,调试人员让被调试程序在嵌入式系统中运行 (步骤S2)。此时,下层基础文件逐一解释并执行上层应用文件编 译生成的字节码。下层基础文件执行字节码时,判断是否遇到断点 (步骤S3)。由于编写被调试程序时,在下层基础文件中预先设置默认断点,因此,下层基础文件执行字节码时,遇到设置在下层基础 文件的默认断点即暂停运行,被调试程序也就在设置了默认断点的地 方暂停,等待调试人员的调试。此时,调试人员可通过用户接口模块设置调试命令,并查看被调试程序的运行信息(步骤S5),如查看某一变量的值、某一寄存器 中存储的数据等。调试人员根据被调试程序的运行信息判断是否需要 添加断点(步骤S6),如果需要添加断点,则在下层基础文件相应 的位置设置条件断点应当满足的条件(步骤S7)。如果不需要设置 断点,则直接执行步骤S8。调试人员设置条件断点应当满足的条件后,通过调试终端向调试 模块发出继续执行被调试程序的命令,被调试程序即继续运行(步骤 S9),并返回步骤S3,判断是否遇到断点。此时若遇到断点,则是 调试人员在被调试程序中添加的条件断点,而并不是默认断点。被调试程序运行时除了判断是否遇到断点外,还会判断调试是否 结束(步骤S4)。若调试人员认为不需要继续调试,则可通过将嵌 入式系统断电等方式终止调试。当嵌入式系统断电后,被调试程序不 会执行,调试也就终止。若调试没有结束,则返回步骤S2,被调试 程序将继续运行,直至调试结束。下面介绍如何在被调试程序中添加断点。参见图4,图4是本发明嵌入式系统在线调试方法实施例中添加断点的流程图。调试人员需要在被调试程序中添加断点时,首先通过 用户接口模块设置添加断点的信息(步骤Sll),如添加断点的位置、断点的类型、断点所在的源文件名、断点在源文件中所在的行数 等信息,并将这些信息传送至调试信息模块和执行模块。调试信息模块接收到添加断点的信息后,通过被调试程序上层应 用文件编译时生成的符号表等调试信息,找出断点设置位置所对应字 节码的起始地址(步骤S12),并将该地址传送到执行模块。执行模块接收用户接口模块和调试信息模块发出的信息和地址 后,设置条件断点应当满足的条件(步骤S13),即当下层基础文件 的虚拟PC指针指向对应字节码起始地址时,条件断点的条件为真。也就是当虚拟PC指针指向对应字节码起始地址时,下层基础文件即触发条件断点,下层基础文件将在条件断点设置的位置停下。 执行模块设置条件断点应当满足的条件后,将该条件发送至调试模块(步骤S14)。调试模块接收该条件后,即在下层基础文件中设 置条件断点的条件。由于下层基础文件执行字节码前,均需要判断条 件断点的条件是否为真,若为真即触发条件断点,被调试程序暂停运 行。因此,当下层基础文件执行字节码时,到虛拟PC指针指向对应 预先设置的字节码起始地址时,即触发条件断点,被调试程序即暂停 运行,等待调试人员的调试。由于被调试程序的暂停是由下层基础文件遇到条件断点引起的, 而当下层基础文件暂停运行时,即停止执行字节码,上层应用文件也 无法运行,因此,当下层基础文件停止运行时,上层应用文件也暂停 运行,调试人员即方便的查看和修改上层应用文件或下层基础文件中 各个参数或寄存器的值,也就是同时对上层应用文件和下层基础文件 进行调试。并且,由于被调试程序在调试运行过程中,是由下层基础文件逐 一解释并执行字节码的,使被调试程序在真实运行环境运行,更有利 于调试人员发现实际运行时被调试程序的运行状况,取得更好的调试 效果。当然,调试人员调试时,经常需要对被调试程序进行单步运行调 试,也就是需要让被调试程序在执行上层应用文件的某一指令后暂停 运行。而上层应用文件源代码的一条指令经过编译后往往形成多条字 节码,因此需要下层基础文件执行多条字节码后暂停运行,由调试人 员对被调试程序进行调试。下面介绍应用本发明如何实现单步运行。参见图5,图5是本发明嵌入式系统在线调试方法实施例中第一 类单步运行的流程图。调试人员设置单步运行时,首先通过用户接口 模块设置需要单步运行的信息,如设置单步运行的位置等。例如,需 要在被调试程序上层应用文件源代码第502行设置单步运行,调试人 员则通过用户^^秦口^^块设置在被调试程序中在源代码的第502行设置单步运行的信息(步骤S21),用户接口模块即将该信息传送到调试 信息模块和执行模块。用户接口模块接收该信息后,找出源代码第502行对应字节码的 起止地址(步骤S22)。例如,源代码第502行对应的字节码起止地 址为0X1504至0X1506,调试信息模块找出该起止地址后,将其发送 至执行模块。下层基础文件逐一执行字节码时,不断判断虛拟PC指针在对应 字节码起止范围内(步骤S23),若虚拟PC指针指向的地址已经在 该起止地址范围内,如指向的地址为0X1504 ,则设置在当前条件 下,条件断点的条件为真(步骤S24),即触发条件断点,此时被调 试程序即暂停,并不执行地址为0X1504字节码。由于上层应用文件源代码502行对应的字节码并没有完全执行完 毕,被调试程序不应该暂停运行,因此,调试模块向被调试程序发出 继续运行的命令(步骤S26),下层基础文件即继续执行当前字节 码,即执行地址为0X1504字节码。同样,下层基础文件执行完地址 为0X1504字节码后,将继续执行地址为0X1505和0X1506字节码。下层基础文件执行完地址为0X1506字节码后,虛拟PC指针指向 地址为0X1507字节码,此时虚拟PC指针不在对应字节码起止范围 内,则执行模块设置条件断点在当前条件下为假(步骤S25)。但被 调试程序不会继续运行,而是等待调试模块发出继续运行的命令后才 能继续运行。此时,被调试程序仍然是处于暂停运行状态,调试人员 即可对上层应用文件和下层基础文件进行调试,并在调试完毕后再发 出继续运行的命令,被调试程序即继续运行,即执行地址为0X1507 字节码,并在执行该字节码后继续运行,直至遇到下一断点。由此可见,调试人员设置单步运行时,被调试程序下层基础文件 并不单步执行每一字节码,而是在执行完毕某一行源代码指令对应所 有字节码后才单步运行,即实现源码级的单步运行。当然,应用本发明的调试方法也可以实现字节码级的单步运行, 只要设置在设置条件断点在当前运行条件下为真后,不继续运行被调试程序,而是等待调试终端发出的调试命令,即可使被调试程序执行 完每一条字节码后暂停运行,实现字节码级的单步运行。调试人员在调试时,有时需要使用第二类的单步运行,也就是"next命令",即若设置单步运行处为函数调用命令时,在执行完毕 该调用函数后再进行暂停运行。因此,下面介绍本发明如何实现该类 的单步运行。参见图6,图6是本发明嵌入式系统在线调试方法实施例中第二 类单步运行的流程图。与第一类单步运行类似,执行第二类单步运行 时,首先由用户接口模块设置单步运行的信息(步骤S31),并将该 信息发送至调试信息模块和执行模块。调试信息模块接收到该信息 后,找出对应字节码对应的起止地址(步骤S32),并将地址发送至执行模块。被调试程序运行时不断判断虚拟PC指针是否指向对应字节码起 止地址范围内(步骤S33),若没有,则设置条件断点在当前条件下 的条件为假(步骤S35)。这些与前述第一类单步运行工作过程相 同,在此不再赘述。当虚拟PC指针指向对应字节码起止地址范围内时,则计算当前 字节码的长度(步骤S34)。字节码的长度不是固定的,不同字节码 的长度差别较大。执行模块计算当前字节码长度后将其暂时保存。接着,执行模块判断当前字节码对应的是否为函数调用命令(步 骤S36),若不是函数调用命令,则直接将条件断点在当前条件下的 条件设为真(步骤S38),被调试程序即进入单步运行。若当前字节码对应的是函数调用程序,则需要跳过该调用函数, 再执行单步运行。此时,执行模块将设置条件断点应当满足的条件。调试人员需要被调试程序在执行当前字节码对应的调用函数后再停 下,因此条件断点应当满足的条件是当虚拟PC指针指向的地址是当 前虛拟PC指针指向的地址与当前字节码长度之和时为真(步骤 S37)。这样,当虚拟PC指针指向对应字节码起止地址时,被调试程 序并不暂停运行,而是继续执行调用函数的相关操作,并在执行该函 数调用的操作后再触发条件断点。执行模块设置完条件断点的条件后,由调试模块向被调试程序发出继续运行的命令,被调试程序继续运行(步骤S39),直至遇到预 先设置的断点。被调试程序遇到断点后即暂停运行,等待调试人员的 调试。当然,上述功能仅是本发明调试方法的部分功能,本发明实际应 用过程中,还可以实现如源代码列表、显示函数执行结果、显示函数 调用关系等功能,这些功能均可基于在下层基础文件中设置条件断点 以及调试信息实现,在此不再详细描述。应用本发明的调试方法对开发语言分层的嵌入式系统进行调试, 使用在下层基础文件中设置条件断点的方式使被调试程序暂停运行, 可同时对上层应用文件与下层基础文件同时进行调试,使被调试程序 在最真实的运行环境中调试运行,更有利于调试人员发现被调试程序 存在的问题,也大大方便调试人员进行调试工作。 一旦调试人员发现 问题,可同时修改上层应用文件和下层基础文件,大大减少调试人员 分别对上层应用文件和下层基础文件进行调试时不断调整被调试程序 的麻烦。当然,本发明所指的嵌入式系统可以是多种多样的,包括智能 卡、单片机等均可以使用本发明的调试方法进行调试。使用上述的嵌 入式系统时,有些并不是直接与调试终端连接,如智能卡,需要通过 读卡器与调试终端连接。只有在调试时,在智能卡与调试终端之间添 加 一读卡器作为连接设备即可。同样,编写上层应用文件与下层基础文件的语言也是多种多样 的,例如使用C语言编写上层应用文件,只要上层应用文件经过编译 后生成下层基础文件能够逐一执行的字节码即可,或者使用汇编语言 编写下层基础文件,只要下层基础文件能够被编译成硬件能够识别的 机器指令,这些均不影响本发明的实现。最后,需要强调的是,本发明不限于上述实施方式,诸如默认断 点设置位置的改变、条件断点设置方式的改变、编写被调试程序语言 的改变等微小变化也应该包括在本发明的保护范围内。
权利要求
1、嵌入式系统的调试方法,该嵌入式系统与调试终端连接,该嵌入式系统包括调试模块,该调试终端包括用户接口模块、调试信息模块及执行调试命令的执行模块,该调试方法包括以下步骤步骤一编写被调试程序,该被调试程序包括上层应用文件及下层基础文件,并在被调试程序的下层基础文件中添加默认断点,将被调试程序编译后下载到嵌入式系统中,所述上层应用文件编译后以字节码的形式存储在嵌入式系统中;步骤二在嵌入式系统中运行被调试程序,被调试程序运行至断点时暂停运行;步骤三调试终端查看和/或修改被调试程序的运行信息,判断是否需要在被调试程序的上层应用文件中添加断点,若需要,则在被调试程序的下层基础文件中相对应的位置设置条件断点应当满足的条件,否则,执行下一步;步骤四所述调试模块向被调试程序发送继续运行的命令,被调试程序继续运行;步骤五若被调试程序遇到条件断点,则返回执行步骤二,否则,继续运行被调试程序。
2、 根据权利要求l所述嵌入式系统的调试方法,其特征在于 所述步骤三中,若需要在被调试程序的上层应用文件中添加断点,用户接口模块设置需要添加断点的信息,并将该信息发送至调试 信息模块及执行模块,调试信息模块找出上层应用文件对应字节码的 起始地址,发送至执行模块,执行模块设置条件断点应当满足的条 件,并将该条件发送至嵌入式系统的调试模块。
3、 根据权利要求2所述嵌入式系统的调试方法,其特征在于 所述下层基础文件包括一指向上层应用文件编译后生成字节码的虛拟PC指针;所述条件断点应当满足的条件是当所述下层基础文件的虚拟PC 指针指向所述对应字节码的起始地址时为真。
4、 根据权利要求3所述嵌入式系统的调试方法,其特征在于所述步骤三中还包括单步运行的步骤用户接口模块设置需要单 步运行的信息,并将该信息发送至调试信息模块及执行模块,调试信 息模块找出上层应用文件对应字节码的起止地址,发送至执行模块, 执行模块判断当前所述下层基础文件的虚拟PC指针是否指向所述对 应字节码的起止地址范围内,并设置条件断点应当满足的条件。
5、 根据权利要求4所述嵌入式系统的调试方法,其特征在于 若当前所述虚拟PC指针指向对应字节码的起止地址范围内时,设置条件断点在当前条件下为真;若当前所述虚拟PC指针未指向对应字节码的起止地址范围内 时,设置条件断点在当前条件下为假。
6、 根据权利要求3所述嵌入式系统的调试方法,其特征在于 所述步骤三中还包括单步运行步骤用户接口模块设置需要单步运行的信息,并将该信息发送至调试信息模块及执行模块,调试信息 模块找出上层应用文件对应字节码的起止地址,发送至执行模块,执 行模块判断当前下层基础文件的虛拟PC指针是否指向所述对应字节 码的起止地址范围内,若是,则计算对应字节码长度,判断该字节码 对应的命令是否为函数调用命令,并设置条件断点应当满足的条件。
7、 根据权利要求6所述嵌入式系统的调试方法,其特征在于 若所述字节码对应的命令为函数调用命令,设置条件断点应当满足的条件为当虚拟PC指针指向当前地址与当前字节码长度之和时为真;若所述字节码对应的命令不是函数调用命令,设置条件断点在当 前条件下为真。
全文摘要
本发明提供一种嵌入式系统的调试方法,包括步骤一编写包括上层应用文件及下层基础文件被调试程序,在下层基础文件中添加默认断点,将被调试程序编译后下载到嵌入式系统中;步骤二在嵌入式系统中运行被调试程序,被调试程序运行至断点时暂停运行;步骤三调试终端查看被调试程序的运行信息,判断是否需要在被调试程序的上层应用文件中添加断点,若需要,在下层基础文件中相对应的位置设置条件断点应当满足的条件,否则执行下一步;步骤四继续运行被调试程序;步骤五若被调试程序遇到条件断点,则返回执行步骤二,否则继续运行被调试程序。本发明可同时对被调试程序的上层应用文件和下层基础文件同时进行调试,方便调试人员进行调试工作。
文档编号G06F11/36GK101216801SQ20071003301
公开日2008年7月9日 申请日期2007年12月27日 优先权日2007年12月27日
发明者斌 张, 伟 郭 申请人:东信和平智能卡股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1