嵌入式系统的在线调试系统及其调试方法

文档序号:6572156阅读:140来源:国知局
专利名称:嵌入式系统的在线调试系统及其调试方法
技术领域
本发明涉及一种嵌入式系统的在线调试系统,尤其是嵌入式系统 的动态在线调试系统及应用该在线调试系统的调试方法。
背景技术
随着电子技术的发展,嵌入式系统已经广泛应用在电子通信、自 动控制等领域。随着嵌入式系统的发展,其运算速度越来越快,存储 容量也越来越大,在嵌入式系统中运行的程序也越来越庞大且更加复 杂,程序运行时出现错误或缺陷几乎是不可避免的。因此,嵌入式系 统中运行的程序编写完毕后,需要进行调试,以便发现并消除缺陷。
公开号为CN1752946A的中国发明专利申请公开了名为"一种嵌 入式系统的调试方法及其系统"的发明创造。该专利申请公开的嵌入 式系统的调试系统包括相互连接的调试终端和嵌入式系统,嵌入式系 统中包括被调试程序,并在被调试程序中添加调试模块。调试时,首 先在被调试程序中预设若干个断点,并将被调试程序下载到嵌入式系 统中,然后,在嵌入式系统中运行被调试程序。;陂调试程序运行过程 中遇到预设断点时便暂停运行,等待接收调试终端发出的命令。调试 终端读取被调试程序运行环境的数据,并判断被调试程序是否存在问 题,以此判断是否需要继续运行被调试程序。如被调试程序无需继续 运行,则中断调试并结束;若需要继续运行,则由调试模块向被调试 程序发出继续运行命令,被调试程序继续运行直至遇到新的断点。被 调试程序如此运行直至完毕。
上述调试方法虽然能有效地对被调试程序进行调试,但由于断点 是预设在被调试程序中,因此,在对被调试程序进行时断点的个数以 及断点设置的位置都已固定,不能在运行过程中再修改。调试时,被 调试程序只能在预设断点处停下,无法在调试过程中添加新的断点。 若需要添加新的断点,只能退出调试后,再在被调试程序中添加新的
断点,这样使调试工作很不灵活,并给调试带来不便。同时,由于断 点预设在被调试程序中,无法动态地实现单步运行功能。
此外,对较为复杂的被调试程序,往往需要在被调试程序中设置 大量的断点。由于每一断点的设置均占用一定的存储空间,若在被调 试程序中设置断点的数量过多,则需要占用嵌入式系统中大量的存储 空间,而断点在被调试程序运行过程中并不起任何作用,这就造成大 量存储空间的浪费。

发明内容
本发明的主要目的是提供一种可在调试过程中动态设置断点的嵌
入式系统的在线调试系统;
本发明的另 一 目的是提供一种应用上述嵌入式系统的在线调试系 统对嵌入式系统进行调试的在线调试方法。
为实现上述的主要目的,本发明提供的嵌入式系统在线调试系统 包括嵌入式系统和调试终端,该嵌入式系统与调试终端通过连接设备 连接。其中,该调试终端包括用户接口模块、符号处理模块和目标处 理模块。用户接口模块接收和解释调试命令,并将调试命令的相关信 息发送给符号处理模块,符号处理模块根据这些信息找出调试命令中 相应变量或函数的地址等信息,并传送到目标处理模块。
目标处理模块包括执行模块和通信模块,其中执行模块执行用户 接口模块发出的命令,并根据符号处理模块提供的地址信息向通信模 块发出对嵌入式系统进行调试的具体命令信息,通信模块将该命令信 息发送到连接设备。
嵌入式系统包括被调试程序和调试模块,其中被调试程序是在调 试前下载到嵌入式设备上,调试模块包括通信模块、命令处理模块和 上下文处理模块。通信模块用于接收连接设备发送的命令信息,并将 该命令信息传送到命令处理模块,命令处理模块根据该命令信息执行 相应的操作。上下文处理模块在被调试程序中断时保存被调试程序当 前的运行信息,如各寄存器的值等。
当然,调试终端的目标处理模块中还可以设置栈帧分析模块,栈 帧分析模块根据用户接口模块发出的信息和符号处理模块提供的相应 地址信息,通过查看嵌入式系统中相应函数的地址、栈帧指针、函数 返回值等信息分析某一 函数的调用关系,并将该调用关系传回用户接 口模块,用户接口模块将调用关系显示出来。
由于符号处理模块可以获取各变量、函数的地址等信息,目标处 理模块即可实时通过嵌入式系统的调试模块对被调试程序进行修改, 这样就可以动态的在被调试程序中添加新的断点,大大的方便调试人 员的调试工作。并且由于可以动态添加断点,因此动态的单步运行也 就可以实现。
同时,由于断点是在调试时动态添加的,因此在^:调试程序中只 需要设置一个默认断点即可,减少被调试程序占用的存储空间,避免 造成存储空间的浪费。
为了实现上述的另 一 目的,本发明提供的嵌入式系统在线调试方 法应用在前述的嵌入式系统在线调试系统中,该调试方法包括以下步

步骤一在被调试程序中添加默认断点,并将被调试程序下载到 嵌入式系统中。
步骤二在嵌入式系统中运行被调试程序,被调试程序运行至断 点时暂停运行,上下文处理模块保存被调试程序当前的运行信息,即 将各参数的值、各寄存器中的值和PC (Program Counter,程序计数 器)指针相对位置等信息存储到指定的位置中。
步骤三调试终端查看和/或修改被调试程序的运行信息,判断 是否需要在被调试程序中添加新的断点,若需要,则在被调试程序中 添加新的断点,否则,纟丸行下一步。
步骤四命令处理模块向被调试程序发送继续运行的命令,上下 文处理模块恢复被调试程序中断时的运行信息,即将步骤二中被存储 的信息还原,被调试程序继续运行。
步骤五若被调试程序遇到断点,则返回执行步骤二,否则,继 续运行被调试程序。添加新的断点时,首先由用户接口模块设置需要添加断点的信 息,包括添加断点的位置、断点的类型等,并将这些信息发送至符号 处理模块,符号处理模块找出需要添加断点的地址,如断点在需要添 加到嵌入式系统中的地址等,然后将地址信息发出给执行模块。执行 模块接收到用户接口模块发出需要添加断点的信息,并根据符号处理 模块提供的地址信息,分析需要读取存储在嵌入式系统中哪一地址内 的数据,并通过通信模块及连接设备向嵌入式系统发出读取存储在该 地址内数据的命令信息。调试模块根据该命令信息读取相应数据后返 回至调试终端,调试终端将该数据保存起来。然后执行模块再发出改 写存储在该地址内数据的命令信息,改写为 一个能够引发异常的调试 指令。
由上述方法可见,被调试程序运行时遇到断点即暂停运行,并等 待调试终端发出调试命令。若调试终端判断需要添加新的断点时即可 动态的添加新的断点。这样,不需要预先在被调试程序中设置大量的 断点,大大方便调试人员进行调试工作。同时,若需要进行动态单步 运行时,只要在需要单步运行的地方设置单步运行的指令即可。


图l是本发明嵌入式系统在线调试系统实施例的示意框图; 图2是本发明嵌入式系统在线调试方法实施例的流程图; 图3是本发明嵌入式系统在线调试方法实施例中查看被调试程序 运行信息的流程图4是本发明嵌入式系统在线调试方法实施例中添加新断点的流程图。
以下结合附图及实施例对本发明作进 一 步说明。
具体实施例方式
参见图1,图1是本发明嵌入式系统在线调试系统实施例的示意 框图。调试系统由调试终端1、连接设备2和嵌入式系统3组成,其 中调试终端1通过连接设备2与嵌入式系统3连接。
调试终端1包括用户接口模块11、符号处理模块12和目标处理 模块13。用户接口模块11是调试终端1与调试人员的接口界面,用 于接收和解释调试人员设置的调试命令,包括添加新的断点、查看某 一参数的值、查看某一函数在被调试程序中的调用关系等等。同时, 用户接口才莫块11还显示被调试程序当前运行的状态,如程序源代 码、PC指针所在行等信息。
符号处理模块12通过解析被调试程序编译时生成的符号表、行 号表等调试信息,获取如变量类型、变量地址、函数地址范围、源代 码中行起始地址等信息,并根据用户接口模块11发出的信息向目标 处理模块13提供相应的信息。
目标处理模块13包括执行模块15、栈帧分析模块16和通信模 块17。执行模块15可接收用户接口模块11发出关于调试命令的信 息,并接收符号处理模块提供的该调试命令中相应的变量、函数的地 址等信息,并根据这些地址信息向通信模块17发出相应的命令信 息,通信模块17将该命令信息传送至连接设备2。
栈帧分析模块16主要用于分析被调试程序中各函数的调用关系 以及函数的参数、局部变量等信息。栈帧分析模块16需要分析某一 函数的调用关系时,需要使用符号处理模块12提供的该函数的起始 地址信息、函数的参数地址等从嵌入式系统3中获取栈帧指针和栈指 针的相对位置、函数的参数返回值等信息来分析函数的调用关系。同 时,栈帧分析模块16将分析结果发送的用户接口模块11,用户接口 模块11即将该结果显示出来。
嵌入式系统3包括被调试程序31和调试模块32,其中被调试程 序31在调试前下载到嵌入式系统3中,调试模块32根据调试终端1 发出的命令信息对被调试程序31进行调试。
调试模块32包括通信模块36、命令处理模块35和上下文处理 模块34。通信模块36接收连接设备2传送的命令信息,并将这些命 令信息传送至命令处理模块35,命令处理模块35根据这些命令信息 执行相应的操作,如读取被调试程序31中某一变量的值、在被调试 程序31中添加新的断点等,并在操作完毕后通过通信^t块36、连接
设备2向调试终端1返回相应的信息,如读取变量的值、操作是否成 功等。
上下文处理模块34用于在被调试程序31中断时保存被调试程序 31当前的运行信息。被调试程序31运行过程中遇到断点即暂停运 行,此时,上下文处理模块34即将被调试模块31当前的运行信息, 如各个寄存器中的数据等,存储到指定的位置。当被调试程序31需 要继续运行时,上下文处理模块34将这些信息还原,即恢复被调试 程序31中断时的运行状态。
使用本发明的嵌入式在线调试系统对嵌入式系统进行调试的过程 如图2所示,图2也是本发明嵌入式系统在线调试方法实施例的流程 图。进行调试时,首先在被调试程序中添加一个默认断点,然后对被 调试程序进行编译,并将编译后的程序下栽到嵌入式系统中(步骤 Sl)。然后调试终端将被调试程序编译时生成的调试信息读入,并与 嵌入式系统建立通信。
接着,在嵌入式系统中运行被调试程序(步骤S2),并将被调 试程序的运行状态信息在调试终端的用户接口模块上显示出来。嵌入 式系统判断被调试程序运行时是否遇到断点(步骤S3),若没有遇 到断点,则进一步判断调试是否结束(步骤S4),如嵌入式系统断 电等,若调试结束,则结束调试,若调试没有结束,则返回步骤 S2,继续运行被调试程序。
由于被调试程序中设置有默认断点,被调试程序运行至默认断点 时将暂停运行。此时,上下文处理模块保存被调试程序当前的运行信 息(步骤S5),即将被调试程序中各寄存器的值等存储到一个指定 位置。
然后,调试终端查看被调试程序的运行信息(步骤S6),这些 运行信息包括各寄存器的值等,调试人员通过判断这些信息判断被调 试程序运行是否正常,从而判断是否需要添加新的断点(步骤 S7),若需要添加新的断点,调试终端将向调试模块发出添加新断点 的命令(步骤S8),如不需要添加新的断点,则直接执行步骤S9。
调试终端在被调试程序中设置断点后,调试模块向被调试程序发 出继续运行的命令。此时,上下文处理模块恢复被调试程序中断时的
运行信息(步骤S9),也就是将被调试程序中断时各寄存器的值等 信息写回原来的位置,使被调试程序的运行信息与中断时一致。这 样,被调试程序就可以在原来的运行环境中继续运行。当然,若调试 人员在调试时改变被调试程序的运行环境,如改变某一参数的值等, 则中断结束后,被调试程序在新的运行环境中运行。
被调试程序在运行时,嵌入式系统将继续判断被调试程序是否遇 到断点(返回步骤S3),并以此循环直至结束。
由于被调试程序中的断点可以被动态地设置,调试人员便不需要 预先将大量断点设置在被调试程序中。调试人员可以在调试过程中根 据被调试程序的运行情况判断是否需要添加新的断点,并判断添加新 断点的位置,这样大大增加了调试工作的灵活性,给调试人员带来极 大的方Y更。
同时,若调试人员需要让被调试程序实现动态单步运行,可由调 试终端向嵌入式系统发送汇编级的单步运行命令,嵌入式系统中的命 令处理模块处理该命令时,计算出PC指针下一个需要执行的机器指 令地址,并在该地址上设置一个断点,然后让^皮调试程序继续运行。 当被调试程序运行至该地址时即中断,并在中断后恢复原来的程序, 同时将PC指针当前位置返回调试终端,调试终端判断源代码是否运 行至下一行,若没有则继续发送汇编级的单步运行命令。这样,被调 试程序运行下一条指令后将再次暂停运行,调试人员即可检验嵌入式 系统是否正确执行了该指令。
并且,由于调试人员无需在被调试程序预设大量断点,使被调试 程序占用的存储空间大大减少,避免了存储空间的浪费。
在介绍本发明嵌入式系统在线调试方法的调试流程后,下面介绍 调试过程中调试终端是如何查看被调试程序中断时的状态信息的。
参见图3,图3是本发明嵌入式系统在线调试方法实施例中查看 被调试程序运行信息的流程图。通常,调试人员需要查看被调试程序 中断时某一变量的值。当被调试程序遇到断点暂停运行后,调试人员
通过调试终端的用户接口模块设置需要查看变量的变量名信息(步骤
511) ,并将该变量名的信息传送到符号处理模块和执行模块。
符号处理模块接收到用户接口模块发出的信息后,根据被调试程 序编译时生成的调试信息找出该变量在嵌入式系统中的地址(步骤
512) ,并将该地址信息发送至执行模块。执行模块根据符号处理模 块的地址信息,获知需要读取嵌入式系统中存储在哪一地址内的数 据,即发出读取存储在该地址内数据的命令信息(步骤S13),并将 该命令信息发送到调试终端的通信模块,并通过连接设备将该命令信 息传送到嵌入式系统的通信模块中。
嵌入式系统的通信模块接收到命令信息后,将命令信息传送到命 令处理模块,命令处理模块即根据该命令信息读取存储在该地址内的 数据,并将数据传回用户接口模块(步骤S14),用户接口模块接收 该数据后并将数据显示出来(步骤S15)。这样,调试人员即可查看 到该变量的值,从而判断被调试程序是否存在问题。
修改某一变量的值的过程与上述查看某一变量值的过程类似。调
试人员需要修改某一变量的值时,也是通过用户接口模块设置需要修
改变量的信息,符号处理模块找到该变量的地址后,执行模块即可发
出改写存储在该地址内数据的命令信息,嵌入式系统在接收到该命令
信息后执行相应的操作,并向用户接口模块返回修改成功或失败的信 自
当调试人员查看或修改存储在某一寄存器的值时,只要通过用户 接口模块设置该寄存器名等信息,执行模块即通过通信模块发出查看 或修改该寄存器值的命令。嵌入式系统执行相关操作后,向用户接口 模块返回该寄存器的值或修改是否成功的信息。
在嵌入式系统的在线调试方法中,调试终端查看嵌入式系统的运
行信息后,往往需要在被调试程序中添加新的断点。参见图4,图4 是本发明嵌入式系统的在线调试方法的添加新断点的流程图。
添加新断点时,调试人员通过用户接口模块设置需要添加新断点 的信息(步骤S21),包括断点添加的位置、断点类型等。例如,用
户接口模块设置需要在被调试程序的第32行添加一新的断点,然 后,将这一信息发送到符号处理模块和执行模块。
符号处理模块接收到该信息后,通过被调试程序编译时生成的调 试信息找出需要添加断点的地址(步骤S22),如找出被调试程序第 32行所对应的嵌入式系统内的存储地址,例如该地址为0X1844,符 号处理模块即将该地址发送给执行模块。
然后,执行模块根据符号处理模块提供的地址,发出读取存储在 嵌入式系统内地址为0X1844的数据的命令信息(步骤S23),并通 过通信模块和连接设备将该命令信息传送至嵌入式系统。
嵌入式系统的通信模块接收到该命令信息后传送至命令处理模 块,命令处理模块即读取存储在地址0X1844内的数据,并将该数据 传送回用户接口模块。用户接口模块接收到该数据后,将该数据保存 至指定的位置(步骤S24 )。
接着,执行模块再发出改写地址0X1844内的命令信息(步骤 S25),将一调试指令写入到该地址中,并将这一命令信息发送至嵌 入式系统。嵌入式系统接收该命令信息后,将存储地址0X1844内的 数据改写,并向用户接口模块返回是否改写成功的信息。
用户接口模块接收到该返回信息(步骤S26)后,判断改写是否
成功(步骤S27),若改写成功,则结束,若改写失败,嵌入式系统 向用户接口模块返回改写失败的信息,用户接口模块即可接收该返回 信息(步骤S28),并显示出来,调试人员即可知道改写失败。
这样,当被调试程序继续运行并遇到该调试指令时即?I发异常, 被调试程序暂停运行,即成功添加断点。
当被调试程序需要继续运行时,上下文处理模块将恢复被调试程 序中断时的运行信息。但是,由于被调试程序中断点处的原有程序被 修改,将造成被调试程序无法正常运行下去,因此,在恢复被调试程 序的运行信息时,还需要将断点处的原数据写回被调试程序中。
本实施例中,断点处地址为0X1844,该地址内的原数据在添加 断点时已经被用户接口模块保存,因此,用户接口模块即可方便的将 原数据写回地址0X1844内,^皮调试程序即可继续运行。
同时,本发明的嵌入式系统在线调试方法还可以查看嵌入式系统 内函数的调用关系。查看函数调用关系时,调试人员首先通过用户接 口模块设置需要查看函数的信息,并将该信息发送至符号处理模块和 栈帧分析模块。符号处理模块接收到该信息后,找出该函数的起始地 址、函数的参数地址等信息,并发送至栈帧分析模块。栈帧分析模块 根据这些地址信息,通过通信模块和连接设备向嵌入式系统发送读取 相应的栈帧指针和栈指针的相对位置等信息的命令。在嵌入式系统将 相应的信息返回至栈帧分析模块后,栈帧分析模块即根据这些信息, 并结合函数参数和返回值的传递方式等分析函数的调用关系。分析完 毕后,将分析结果发送至用户接口模块,用户接口模块将结果显示出 来,调试人员即可查看到函数的调用关系,当然,也可以利用该函数 的调用关系作为分析被调试程序运行是否存在问题的依据。
由此可见,本发明的嵌入式系统在线调试方法可在被调试程序调 试过程中动态地设置断点,使调试人员方便地查看被调试程序任一时 刻的运行状况,并可根据需要实现单步运行,使调试变得更加灵活方 便。同时,调试人员无需在被调试程序中预设大量的断点,减少被调 试程序占用的存储空间。
嵌入式系统的在线调试系统和调试方法一个具体应用就是智能卡
的调试,如SIM卡的调试。需要调试SIM卡的程序时,调试终端可以 是调试计算机,嵌入式系统是SIM卡,而读卡器则作为两者的连接设 备。
当然,本发明不仅限于SIM卡的调试,其它的嵌入式系统,如单 片机等,可以使用本发明进行调试。若使用在其它嵌入式系统的调试 中,则调试人员应根据不同的嵌入式系统选择相应的调试终端和连接 设备。
最后,需要强调的是,本发明不限于上述实施方式,诸如默认断 点设置位置的改变、连接设备的改变等樣吏小变化也应该包括在本发明 的保护范围内。
权利要求
1、嵌入式系统的在线调试系统,包括嵌入式系统;通过连接设备与所述嵌入式系统连接的调试终端;其特征在于所述调试终端包括用户接口模块;接收所述用户接口模块发出信息的符号处理模块;根据所述符号处理模块提供的信息对所述嵌入式系统进行调试的目标处理模块,所述目标处理模块包括执行用户接口模块发出的命令的执行模块;将执行模块发出的命令信息传送到所述连接设备的通信模块(17);所述嵌入式系统包括被调试程序以及调试模块;所述调试模块包括接收所述连接设备发送的命令信息的通信模块(36);接收通信模块(36)发出的命令信息的命令处理模块;保存被调试程序中断时被调试程序信息的上下文处理模块。
2、 根据权利要求1所述嵌入式系统的在线调试系统,其特征在于所述目标处理模块还包括栈帧分析模块,所述栈帧分析模块根据 通信模块(17)提供的信息分析被调试程序中函数调用关系信息。
3、 根据权利要求1或2所述嵌入式系统的在线调试系统,其特 征在于所述嵌入式系统为智能卡,所述连接设备为读卡器。
4、 应用如权利要求2所述嵌入式系统在线调试系统的调试方 法,包括以下步骤步骤一在被调试程序中添加默认断点,并将被调试程序下载到 嵌入式系统中; 步骤二在嵌入式系统中运行被调试程序,被调试程序运行至断点时暂停运行,所述上下文处理模块保存被调试程序当前的运行信 自 步骤三调试终端查看和/或修改被调试程序的运行信息,判断 是否需要在被调试程序中添加新的断点,若需要,则在被调试程序中 添加新的断点,否则,执行下一步;步骤四所述命令处理模块向被调试程序发送继续运行的命令, 上下文处理模块恢复被调试程序中断时的运行信息,被调试程序继续 运行;步骤五若被调试程序遇到断点,则返回执行步骤二,否则,继 续运行被调试程序。
5、 根据权利要求4所述嵌入式系统的在线调试方法,其特征在于所述步骤三中,若需要在被调试程序中添加新的断点,则用户接 口模块设置需要添加断点的信息,并将该信息发送至符号处理模块及 执行模块,符号处理模块找出需要设置断点的地址,执行模块通过通 信模块(17)及连接设备向嵌入式系统发出读取存储在该地址内数据 的命令信息,并将该地址内数据改写为调试指令。
6、 根据权利要求4所述嵌入式系统的在线调试方法,其特征在于所述步骤三中,调试终端需要查看和/或修改被调试程序中某一 变量值时,用户接口模块设置需要查看和/或修改变量的变量名信 息,并将该信息发送至符号处理模块及执行模块,符号处理模块找出 该变量的地址,执行模块通过通信模块(17)及连接设备向嵌入式系 统发出读取和/或改写存储在该地址内数据的命令信息。
7、 根据权利要求4所述嵌入式系统的在线调试方法,其特征在于所述步骤三还包括调试终端查看被调试程序中函数调用关系的步 骤用户接口模块设置需要查看函数的信息,并将该信息发送至符号 处理模块及栈帧分析模块,符号处理模块找出该函数的起止地址,栈帧分析模块通过通信模块(17)及连接设备获取嵌入式系统内被调试 程序中该函数的地址信息、栈帧指针位置、栈指针位置及函数返回值 信息,结合函数的参数、返回值的传递方式信息,并根据上述信息分 析该函数的调用关系,将该调用关系传送至用户接口模块。
8、根据权利要求4至7任一项所述嵌入式系统的在线调试方 法,其特征在于所述嵌入式系统为智能卡,所述连接设备为读卡器。
全文摘要
本发明提供一种嵌入式系统的在线调试系统及其调试方法,该嵌入式系统通过连接设备与调试终端连接,其中,调试终端包括用户接口模块,接收用户接口模块发出的信息的符号处理模块和目标处理模块,目标处理模块包括执行用户接口模块发出的命令的执行模块,将执行模块发出的命令传送到连接设备的通信模块,该嵌入式系统包括被调试程序及调试模块。该方法包括在被调试程序中添加默认断点,将被调试程序下载到嵌入式系统中并运行;被调试程序运行至断点即暂停运行,调试终端查看被调试程序的运行信息,判断是否需要添加新断点,若需要,添加新断点,否则继续运行调试程序。本发明可在被调试程序调试过程中动态设置断点,方便调试人员进行调试工作。
文档编号G06F11/36GK101183330SQ20071003262
公开日2008年5月21日 申请日期2007年12月13日 优先权日2007年12月13日
发明者斌 张, 徐云锋, 伟 郭 申请人:东信和平智能卡股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1