一种在嵌入式软件运行状态下的动态调试方法及系统技术方案

技术编号:3766472 阅读:319 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种在嵌入式软件运行状态下的动态调试方法及系统,包括:在嵌入式软件运行状态下,输入调试开始控制指令DEBUG,启动指令调试任务,暂停正在运行的被调试程序的各个任务,输入调试控制指令,在所述指令调试任务中执行所述调试控制指令,采用此方法和系统无需专用的程序调试器便可以在程序运行状态下进行动态调试,便于发现软件故障,尤其是程序中偶现型的故障,且可以挂接到任何领域的多任务软件的运行态中,直接进行调试和跟踪。

【技术实现步骤摘要】

本专利技术涉及嵌入式系统,尤其涉及一种在嵌入式软件运行状态下的动态 调试方法及系统。
技术介绍
现阶段对于软件故障的解决方式最常用的是,软件运行出现问题后,首 先编译调试文件,然后装入系统调试器,最后运行调试器设置断点进行单步跟踪和调试;这样的调试方法主要是用来跟踪一些静态的必然出现的程序故 障,常规的问题均可用此方法进行分析跟踪,但是对于工程中出现的一些偶 现的并且是在动态中需要满足一定条件的问题这种办法就毫无作用了 ,因为 此类问题的出现往往依赖于环境和当时的触发M,此类动态问题必须在程 序动态运行中动态跟踪才能得以解决,如果调试器运行起来后,故障的环境 和条件很可能会被全部破坏掉,不利于问题的解决;此外,嵌入式软件被编 译成调试程序和烧结程序在处理上有所不同,有些问题软件处于运行态时出 现,装入调试器后问题就不出现了。目前也有过一些这种问题的解决办法,例如利用ASCII ( American Standard Code for Information Interchange ,美国信息互换标准4戈码)码流的功 能实时地进行程序变量值的打印和监控,这种方法不能从^^本上解决问题, 因为有些程序死角的变量跟踪,必须在单步跟踪中逐步分析变量的关联情况,最终才能找出问题的症结和隐患,而且用Ascn码流打印的都是程序动态运 行的数据,很难把握清楚当前运行状态和变量的关联情况,另外每发现一个 疑点就重新修改软件的Ascn码流功能,再重新编译重新下载软件,既不现 实也非常麻烦,所以需要一种可以在嵌入式软件运行状态下的调试方法
技术实现思路
本专利技术要解决的技术问题是提供一种在嵌入式软件运行状态下的动态调 试方法及系统,无需专用的程序调试器便可以在程序运行状态下进行动态调 试,便于发现软件故障,尤其是程序中偶现型的故障。为了解决上述问题,本专利技术提供了一种在嵌入式软件运行状态下的动态调试方法及系统,包括在嵌入式软件运行状态下,输入调试开始控制指令 DEBUG,启动指令调试任务,暂停正在运行的被调试程序的各个任务,输入 调试控制指令,在所述指令调试任务中执行所述调试控制指令。进一步地,所述调试任务的优先级高于所述被调试程序任务的优先级。进一步地,所述调试控制指令为步长为N的单步执行控制指令时,计算 一休眠时间M,使所述指令调试任务休眠M时长的时间,从被调试程序暂停 点处开始继续执行N步长的指令后再次暂停,执行所述指令调试任务,N为 大于等于l的整数,M为一实数。进一步地,根据嵌入式设备CPU的主频计算从被调试程序暂停点处开始 N个步长的指令的执行时间,将此执行时间作为所述休眠时间。进一步地,所述调试控制指令为设置步长控制指令时,将记录的步长信 息更改为所述设置步长控制指令中指示的步长,并在下一次收到以默认步长 单步执行控制指令时,使用所述步长信息中记录的步长。进一步地,根据嵌入式设备CPU主频和指令周期计算一条代码指令平均 执行时间,N的值为此一条代码指令平均执行时间与所述指令周期的比值。进一步地,所述调试控制指令为断点插入控制指令时,记录被调试程序 中需设置断点的代码位置;所述调试控制指令为运行指令时,指令调试任务 根据当前被调试程序暂停的位置和所记录的下一个断点的位置计算出一休眠 时间,使此指令调试任务休眠,^皮调试程序运行到所记录的下一个断点处时, 指令调试任务的休眠时间终止,再次暂停被调试程序,回到指令调试任务。进一步地,所述调试控制指令为增加变量控制指令时,将所述增加变量 控制指令中指示的变量名绑定到所述指令调试任务中;所述调试控制指令为 删除变量控制指令时,将所述删除变量控制指令中指示的变量名从所述指令 调试任务中解除绑定。进一步地,所述调试控制指令为显示控制指令时,将所述指令调试任务 中绑定的变量名及其当前的具体值输出并向用户显示。进一步地,所述调试任务的优先级是系统中各任务优先级中最高优先级。 为了解决上述问题,本专利技术还提供了一种在嵌入式软件运行状态下的动态调试系统,包括相连接的调试设备和嵌入式设备;调试设备中包括调试输 入模块;嵌入式设备中包括内部输入模块、被调试程序运行模块,动态调试 模块,和指令调试模块;调试输入模块,用于输入用户的调试指令;内部输 入模块,用于将从调试输入才莫块接收的调试指令处理成动态调试才莫块可识别 的调试指令,输入至动态调试才莫块或指令调试才莫块;被调试程序运行才莫块, 用于运行被调试程序;动态调试才莫块,用于运行运态调试程序,在收到输入 调试开始控制指令DEBUG后,触发指令调试模块启动指令调试任务;指令 调试模块,用于运行指令调试任务,并在运行指令调试任务时,从内部输入 模块处接收调试指令,并执行此调试控制指令。本专利技术的方法为在实验环境中解决动态出现的故障提供了比较实用的解 决方案,尤其是对于偶现型的故障可以利用这种方法加以跟踪、调试并解决, 工程现场也可以应用此种调试模型解决实际问题,在原有程序中建立一整套 调试指令集的处理程序,实现更为完善的调试信息打印功能,在动态调试中 可以完全不用调试器实现软件故障的动态捕捉和问题的实时定位;另外,这 种调试技术可以挂接到任何领域的多任务软件的运行态中,直接进行调试和 跟踪,在实际应用上,具有非常广泛的意义。附图说明图l是本专利技术中嵌入式软件运行状态下的调试系统的结构图; 图2是本专利技术在嵌入式软件运行状态下的动态调试方法的流程图。具体实施方式在嵌入式软件运行状态下,输入调试开始控制指令(DEBUG),启动指 令调试任务,暂停正在运行的被调试程序的各个任务,输入调试控制指令, 在所述指令调试任务中执行所述调试控制指令,可以在不使用调试器的情况 下在程序执行过程中完成调试,便于发现软件故障,尤其是程序中偶现型的 故障。使正在运行的被调试程序的各个任务暂停的方法中的一种可以是使指 令调试任务的优先级高于被调试程序任务的优先级,更典型的是所述调试指 令执行任务的优先级是系统中最高的优先级。本专利技术不限于此一种方式。如图1所示,嵌入式软件运行状态下的调试系统包括相连接的调试设备 和嵌入式设备,调试设备可以是一PC机或其它控制设备;调试设备中包括调试输入才莫块和调试输出才莫块;调试输入模块,用于输入用户的调试指令;调试输出模块,用于从嵌入式设备接收输出结果并向用户显示。嵌入式设备中包括内部输入模块、内部输出模块、被调试程序运行模块, 动态调试模块,和指令调试模块;内部输入才莫块,用于将从调试输入才莫块接收的调试指令处理成动态调试 模块可识别的调试指令,输入至动态调试才莫块或指令调试模块;内部输出模块,用于从动态调试才莫块接收变量名及其具体值,并向用户 显示;被调试程序运行;漠块,用于运行被调试程序;动态调试模块,用于运行运态调试程序,在收到输入调试开始控制指令 DEBUG后,触发指令调试模块启动指令调试任务;指令调试模块,用于运行指令调试任务,并在运行指令调试任务时,从 内部输入模块处接收调试指令,并执行此调试控制指令。输入设备与嵌入式设备之间传输指令时使用最简单易行的方法即通过 ASCII码流的输入功能建立一套调试指令集进行控制,可以将ASCII码流的7命令处理模块放在指令调试任务(最高优先级的任务)中进行循环处理,即 时响应用户跟踪本文档来自技高网...

【技术保护点】
一种在嵌入式软件运行状态下的动态调试方法及系统,其特征在于, 在嵌入式软件运行状态下,输入调试开始控制指令DEBUG,启动指令调试任务,暂停正在运行的被调试程序的各个任务,输入调试控制指令,在所述指令调试任务中执行所述调试控制指令。

【技术特征摘要】

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

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

1