一种多断点的软件调试装置和方法

文档序号:8457215阅读:237来源:国知局
一种多断点的软件调试装置和方法
【技术领域】
[0001]本发明涉及软件调试技术,尤其涉及一种多断点的软件调试装置和方法。
【背景技术】
[0002]微处理器调试技术广泛地应用于软件故障定位、软件代码分析以及逆向工程领域,对微处理器的设计和使用有至关重要的作用。
[0003]对微处理器的软件进行调试一般包括以下两个方面的内容:在软件程序中设置断点,使程序执行到所设置的断点位置时产生中断并停止执行;用户可以对程序执行单步操作或使之摆脱中断状态继续往下执行。
[0004]从上述内容可以看出,断点技术是微处理器的软件调试中不可或缺并有决定性作用的技术。当前的断点技术主要分为两种:
[0005]第一种,硬件断点的方案。这种技术采用若干个断点寄存器来存储断点位置的指针,在微处理器执行指令时,根据配置不断将所执行指令的指针与断点寄存器中的断点指针进行对比,当发生匹配时,产生中断并冻结微处理器的流水线跳入特定程序段进行处理。这种硬件断点的显而易见的缺点就是,由于断点寄存器的数量限制,硬件断点只能实现数量有限的几个断点,在调试过程中会有很多的限制。
[0006]第二种,软件多断点方案。这技术当前使用非常广泛,一般做法是将微处理器执行的指令存储器中的断点位置的指令替换成断点指令,并将断点处的真实指令备份到另一个存储器中,当微处理器执行到断点位置时,处理器流水线解析断点位置处的指令,获知该断点位置处的指令为断点指令后产生中断,并冻结流水线跳入指定程序段进行处理,在产生中断后使用高级语言来解析该断点处的真实指令,利用PC++来使程序跳入断点后一条指令开始执行。上述软件多断点调试技术需要对断点位置的真实指令进行备份,在替换回真实指令时需要高级语言来解析断点处的真实指令,如此,实现该方案需要消耗大量额外的存储空间来存储备份断点处的真实指令,还需要替换流水线中指令,实现困难。

【发明内容】

[0007]为解决现有存在的问题,本发明实施例主要提供一种多断点的软件调试装置和方法,简单易行的实现了多断点的软件调试,同时节省了单板上的存储资源。
[0008]本发明的技术方案是这样实现的:
[0009]本发明提供了一种多断点的软件调试装置,该软件调试装置包括:驱动器、微处理器、指令存储器和微码集成开发环境IDE ;其中,
[0010]所述驱动器,用于获取软件程序中的断点信息,将所述断点信息发送给指令存储器,并根据指令存储器中的断点信息将断点处的真实指令替换成断点指令,在上报中断给IDE后,根据IDE下发的命令将所述断点指令换回真实指令,触发微处理器解冻流水线,并在断点指令执行的间隙将断点处的真实指令再次替换成断点指令;
[0011]所述微处理器,用于当执行到断点指令时,通过驱动器上报中断给IDE,冻结流水线,并根据驱动器的触发解冻流水线,对断点处的真实指令进行取指;
[0012]所述指令存储器,用于存储断点指令和断点信息;
[0013]所述IDE,用于为用户提供下发命令的交互界面。
[0014]上述方案中,所述断点信息包括断点位置地址;所述断点指令为原地跳转指令;所述断点指令执行的间隙为断点指令在原地执行跳转的任意两次的间隙。
[0015]上述方案中,所述驱动器,还用于将来自所述IDE的命令解析成具体的寄存器或存储器读写信号通过总线发送给所述微处理器和/或指令存储器。
[0016]上述方案中,所述驱动器,还用于将断点位置和断点处的真实指令存储到IDE所在的上位机。
[0017]上述方案中,所述微处理器包括:流水线和调试模块;其中,
[0018]所述流水线,用于当执行到断点指令时,解析发现当前指令为断点指令后向所述调试模块发送通知,并在解冻后对断点处的真实指令进行取指;
[0019]所述调试模块,用于当接收到来自所述流水线的通知后,冻结流水线,上报中断给驱动器,并根据驱动器的触发解冻流水线。
[0020]上述方案中,所述调试模块,具体用于当接收到来自所述流水线的通知后,产生停止信号来冻结流水线。
[0021]本发明还提供了一种多断点的软件调试方法,该软件调试方法包括:
[0022]微码集成开发环境IDE在软件程序中设置断点;
[0023]驱动器获取软件程序中的断点信息,根据所述断点信息将断点处的真实指令替换成断点指令;
[0024]当执行到所述断点指令时,微处理器上报中断给IDE,并冻结流水线;
[0025]驱动器根据IDE下发的命令将所述断点指令换回真实指令;
[0026]微处理器解冻流水线,对断点处的真实指令进行取指;
[0027]驱动器在断点指令执行的间隙将断点处的真实指令再次替换成断点指令。
[0028]上述方案中,所述断点信息包括断点位置地址。
[0029]上述方案中的软件调试方法还包括:驱动器将断点位置和断点处的真实指令存储到IDE所在的上位机。
[0030]上述方案中,所述驱动器根据IDE下发的命令将所述断点指令换回真实指令,微处理器解冻流水线,对断点处的真实指令进行取指,驱动器在断点指令执行的间隙将断点处的真实指令再次替换成断点指令为:驱动器根据IDE下发的单步操作命令或继续操作命令,将所述断点指令换回真实指令,在换回真实指令时,微处理器解冻流水线,对断点处的真实指令进行取指,在对所述真实指令取指完成后,在任意两次执行断点指令的间隙将断点处的真实指令再次替换成断点指令。
[0031]本发明实施例提供了一种多断点的软件调试装置和方法,微码集成开发环境(IDE, Integrated Development Environment)在软件程序中设置断点,驱动器获取软件程序中的断点信息,根据所述断点信息将断点处的真实指令替换成断点指令,当执行到所述断点指令时,微处理器上报中断给IDE,并冻结流水线,驱动器根据IDE下发的命令将所述断点指令换回真实指令,微处理器解冻流水线,对断点处的真实指令进行取指,驱动器在断点指令执行的间隙将断点处的真实指令再次替换成断点指令;如此,本申请利用断点指令的特性和流水线冻结的空隙来完成替换指令的操作,不仅可以在指令存储器中继续保留断点,而且不用额外增加单板上的存储空间来存储断点位置的指令,节省大量的硬件存储资源的同时也简化了调试步骤。
【附图说明】
[0032]图1为本发明实施例提供的多断点的软件调试装置的结构示意图
[0033]图2为本发明实施例提供的软件调试装置中微处理器和指令存储器的结构示意图;
[0034]图3为本发明实施例提供的多断点的软件调试方法流程图;
[0035]图4为本发明实施例提供的断点的软件设置方法流程图;
[0036]图5为本发明实施例提供的执行单步操作的流程图;
[0037]图6为本发明实施例提供的执行继续操作的流程图。
【具体实施方式】
[0038]本发明实施例中,IDE在软件程序中设置断点;驱动器获取软件程序中的断点信息,根据所述断点信息将断点处的真实指令替换成断点指令;当执行到所述断点指令时,微处理器上报中断给IDE,并冻结流水线;驱动器根据IDE下发的命令将所述断点指令换回真实指令;微处理器解冻流水线,对断点处的真实指令进行取指;驱动器在断点指令执行的间隙将断点处的真实指令再次替换成断点指令,通过上述方法来实现多断点的软件调试。
[0039]下面通过附图及具体实施例对本发明做进一步的详细说明;
[0040]本发明实施例提供的多断点的软件调试装置的结构如图1所示,该软件调试装置包括:驱动器(Driver) 10、微处理器11、指令存储器12和IDE13 ;其中,
[0041]所述驱动器10,用于获取软件程序中的断点信息,将所述断点信息发送给指令存储器,并根据指令存储器中的断点信息将断点处的真实指令替换成断点指令,在上报中断给IDE13后,根据IDE13下发的命令将所述断点指令换回真实指令,触发微处理器11解冻流水线,并在断点指令执行的间隙将断点处的真实指令再次替换成断点指令;
[0042]所述微处理器11,用于当执行到所述断点指令时,通过驱动器10上报中断给IDE13,冻结流水线,并根据驱动器10的触发解冻流水线,对断点处的真实指令进行取指;
[0043]所述指令存储器12,用于存储断点指令和断点信息;
[0044]所述IDE13,用于为用户提供下发命令的交互界面;
[0045]其中,所述断点信息包括断点位置地址;
[0046]所述断点指令为原地跳转指令,所述断点指令执行的间隙为断点指令在原地执行跳转的任意两次的间隙;
[0047]所述驱动器10,还用于将来自所述IDE13的命令解析成具体的寄存器或存储器读写信号通过总线发送给所述微处理器11和/或指令存储器12 ;所述命令包括:设置断点命令以及执行单步(Step)操作或继续(Continue)操作等命令;
[0048]所述IDE13安装在上位机上,在为微处理器11和或指令存储器12下发命令后,所述驱动器10,还用于将断点位置和断点处的真实指令存储到IDE13所在的上位机。
[0049]图2所示为本发明实施例提供的微处理器11和指令存储器12的结构图,如图所示,所述微处理器11具体包括:流水线20和调试(Debug)模块21 ;其中,
[0050]所述流水线20,用于当执行到断点指令时,解析发现当前指令为断点指令后向所述调试模块21发送通知,并在解冻后对断点处的真实指令进行取指;
[0051]所述调试模块21,用于当接收到来自所述流水线20的通知后,冻结流水线,上报中断给驱动器10,并根据驱动器10的触发解冻流水线;
[0052]所述调试模块21,具体用于当接收到来自所述流水线20的通知后,产生停止(stall)信号来冻结流水线;
[0053]所述上位机上安装的IDE13可以通过总线操作所述调试模块21中的寄存器来解除流水线冻结,从而使微处理器11可以执行单步操作或继续操作;
[0054]所述上位机上安装的IDE13还可以通过总线来对指令存储器12中存储的指令内容进行修改,所述指令存储器12可以由SRAM组成。
[0055]本发明实施例提供一种多断点的软件调试方法,如图3所示,该软件调试方法包括以下步骤:
[0056]步骤301:在软件程序中设置断点;
[0057]具体的,调试开始后,用户通过IDE在软件程序中设置断点,断点的数量和位置由用户根据需求来设定;
[0058]步骤302:驱动器获取软件程序中的断点信息,根据所述断点信息将断点处的真实指令替换为断点指令;<
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1