一种基于ICTraceBuffer的调试方法与流程

文档序号:11133840阅读:544来源:国知局
一种基于IC TraceBuffer的调试方法与制造工艺

本发明属于软件调试的技术领域,特别涉及一种基于IC TraceBuffer的调试系统及方法。



背景技术:

IC TraceBuffer就是IC内部一块很小的Memory,主要是用来存放IC执行过的痕迹,即被执行过的指令,但是由于Memory很小,所以保存的指令数据有效,通常保存最新执行的几条指令,早期的执行指令不断被覆盖的调试方法及系统。

目前各种各样的应用程序应有尽有,这些应用程序基本上都是使用开发语言和一个调试器来进行开发、调试,但是调试器一般都是集成到集成开发环境(IDE)中,因此大部分开发者都是使用IDE来进行开发应用程序,但是不管是高阶开发语言,如C、C++、Java等,还是低阶开发语言,如汇编语言PIC、6502汇编等,对于开发者来说,编写完代码执行过程上遇到问题,那么必须依靠调试器来进行调试、跟踪并找出问题,进而解决问题,最后才能发布,大部分的应用程序在遇到bugs的时候基本上都可以通过调试器即可比较容易地找出问题,但是针对使用汇编编写的嵌入式大代码量程序,在遇到问题的时候查找就不那么容易,特别是针对这样场景下的应用程序:程序在运行的过程中莫名其妙就复位或者跑飞了,这种情况下依赖调试器查找起来也非常棘手,即使有Call Stack,调试器也无法知道复位之前执行了哪些指令,因为最有可能出现问题的地方是复位之前执行的那几条指令导致或者跟它们相关。



技术实现要素:

基于此,因此本发明的首要目地是提供一种基于IC TraceBuffer的调试方法,该方法能够在传统调试器难以找出问题的情况下尽可能快的找出bugs,提高调试效率,缩短调试时间。

为实现上述目的,本发明的技术方案为:

一种基于IC TraceBuffer的调试方法,其特征在于该方法通过解析TraceBuffer数据模块解析TraceBuffer中内容为对应的汇编指令,并使用显示模块将图形界面显示出来并依赖调试信息进而找到出错程序附近的行。

进一步,所述解析TraceBuffer数据模块首先连接设备,然后获取IC TraceBuffer内容,并对获取的TraceBuffer数据进行分析,得到对应的指令,如:movwf 0x100,最后结合调试信息,得到源代码中真正的指令,如:movfw TimerID。

进一步,所述方法通过显示模块把解析TraceBuffer数据模块中获取到的指令信息用图形界面显示出来,方便用户查看,并且允许用户在显示指令的界面上双击对应的指令信息行能快速定位到该指令对应的源代码行中。

进一步,该方法具体的实现步骤是:

101、当调试器中断下来,解析TraceBuffer数据模块连接硬件设备;

所述调试器中断下来,是指调试器执行Step Out、Step Into、Step Over指令停下来。

102、获取IC TraceBuffer数据,针对数据进行分析,获取每一条指令对应的信息,

所述信息包含:地址、指令机器码、指令周期、指令类型(Read or Write or ReadWrite)。

103、解析TraceBuffer数据模块结合所述信息把指令Machine Code转换为指令OPCode,如把:0x12 0x23转换为movwf 0x03;

104、解析TraceBuffer数据模块结合调试的信息再把指令OPCode转换为真正的源码,如:movwf TimerID;

105、显示模块负责把解析TraceBuffer数据模块解析获取的指令用图形界面的方式给显示出来。

解析TraceBuffer数据模块将数据进行分析并转换指令,能够保证结合调试信息及时、准确地找到对应的指令,再把解析后的指令信息显示在图形界面上,通过图形界面用户可以看到当前IC的执行痕迹,双击用户图形界面中List控件中的任何一行该模块会结合调试信息和指令信息定位到源码对应的行号上,协助用户定位问题。

本发明所实现的调试方法,通过解析TraceBuffer数据模块结合显示模块,能够在传统调试器难以找出问题的情况下尽可能快的找出bugs,提高调试效率,缩短调试时间。

附图说明

图1是本发明所实施的调试控制流程图。

图2是本发明所实施的显示控制流程图。

图3是本发明所实施的显示界面的示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

图1所示,为本发明所实施的基于IC TraceBuffer的调试方法控制流程图,图中所示,解析TraceBuffer数据模块当调试器中断下来(即执行Step Out、Step Into、Step Over停下来后),通过连接上硬件设备,获取IC TraceBuffer数据,针对数据进行分析,获取每一条指令对应的信息,这些信息包含:地址、指令机器码、指令周期、指令类型(Read or Write or ReadWrite),然后结合指令信息把指令Machine Code转换为指令OPCode,如把:0x12 0x23转换为movwf 0x03,最后结合调试信息在把movwf 0x03转换为真正的源码,如:movwf TimerID。

具体步骤为:

S101、调试器中断后,解析TraceBuffer数据模块连接硬件设备。

S102、连接成功后,获取TraceBuffer数据集。数据集包含:地址、指令机器码、指令周期、指令类型(Read or Write or ReadWrite)。

S103、从TraceBuffer数据集中提取指令数据。

S104、提取成功后,分析指令数据,获取该条指令对应的Address、Cycle、Inse、Type、Code Bytes、Instruction等数据。

在该步骤中,获取完该条指令对应的数据后,结合指令信息把指令Machine Code转换为指令OPCode。

S105、结合调试信息,将上述数据转换为源码中对应的指令。

S106、保存S105步骤获得的指令信息到指令数据容器中。

S107、重复S103-S106步骤,直至所有的数据都转换保存完毕。

如图2所示,显示指令模块负责把(1)模块中解析获取的指令用图形界面的方式给显示出来,方便用户查看指令,通过图形界面用户可以看到当前IC指令的执行痕迹,双击用户图形界面中List控件中的任何一行该模块会结合调试信息和指令信息定位到源码对应的行号上,协助用户定位问题。其具体的步骤为:

S201、初始化TraceBuffer指令视图;

S202、获取指令保存解析后的指令数据容器;

S203、从上述容器中依次提取指令数据;

S204、读取成功后按照显示格式将指令数据进行格式化;

S205、将格式化的指令内容插入到图形控件中;然后重复S203-S205步骤,直至提前容器中的所有数据;

S206、显示TraceBuffer指令视图。

再参见图3所示,#为显示每条指令的流水号,Address为显示每条指令的起始地址,Cycles为显示执行每条指令的周期,Code Bytes为显示每条指令对应的机器码,Instruction为显示每条指令,Type为显示每条指令类型,如Read、Write、ReadWrite。

当用户嵌入式程序莫名其妙Reset,很难定位出问题的时候,此时用户可以依靠本专利提到的技术来协助定位问题,这里假如获取当时的TraceBuffer数据显示出来如上图所示,那么出错前IC执行的最近指令有以上4条,当然依靠TraceBuffer的大小,如果TraceBuffer再大,这里显示的内容会更多,此时用户在第二行位置上双击,该模块就会结合指令信息和调试信息定位到源代码行上如:15MOVFW TimerID(15是行号),但是这是针对汇编源文件的情况,如果针对C源文件,由于一条C源文件可能对应多行汇编程序,因此可能双击上面多行均对应到同一行C源文件中,这样均都可以协助用户定位并找出难于发现的问题。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1