Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
MULTI-BREAKPOINT SOFTWARE DEBUGGING DEVICE AND METHOD AND COMPUTER STORAGE MEDIUM
Document Type and Number:
WIPO Patent Application WO/2015/103815
Kind Code:
A1
Abstract:
Disclosed are a multi-breakpoint software debugging device and method. The software debugging device comprises: a driver, a microprocessor, an instruction memory and a microcode integrated development environment (IDE). The software debugging device realizes multi-breakpoint software debugging by using a method of setting breakpoints in a software program, acquiring breakpoint information, replacing instructions at the breakpoints with breakpoint instructions, upon execution of a breakpoint instruction, reporting the interruption, freezing the pipeline, changing the breakpoint instruction back to the real instruction according to a command delivered by the IDE, unfreezing the pipeline, and fetching the real instruction at the breakpoint, and replacing the real instruction at the breakpoint with the breakpoint instruction again at the break of breakpoint instruction execution. Also disclosed is a computer storage medium for storing a computer program that executes the software debugging method.

Inventors:
HAO YU (CN)
AN KANG (CN)
WANG ZHIZHONG (CN)
Application Number:
PCT/CN2014/074564
Publication Date:
July 16, 2015
Filing Date:
April 01, 2014
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
ZHONGXING MICROELECTRONICS TECHNOLOGY CO LTD (CN)
International Classes:
G06F11/36
Foreign References:
CN101295279A2008-10-29
CN101339581A2009-01-07
EP0849672A21998-06-24
Attorney, Agent or Firm:
CHINA PAT INTELLECTUAL PROPERTY OFFICE (CN)
北京派特恩知识产权代理事务所(普通合伙) (CN)
Download PDF:
Claims:
权利要求书

1、 一种多断点的软件调试装置, 该软件调试装置包括: 驱动器、 微处 理器、 指令存储器和微码集成开发环境 IDE; 其中,

所述驱动器, 配置为获取软件程序中的断点信息, 将所述断点信息发 送给指令存储器, 并根据指令存储器中的断点信息将断点处的真实指令替 换成断点指令, 在上报中断给 IDE后, 根据 IDE下发的命令将所述断点指 令换回真实指令, 触发微处理器解冻流水线, 并在断点指令执行的间隙将 断点处的真实指令再次替换成断点指令;

所述微处理器, 配置为当执行到断点指令时, 通过驱动器上报中断给 IDE, 冻结流水线, 并根据驱动器的触发解冻流水线, 对断点处的真实指令 进行取指;

所述指令存储器, 配置为存储断点指令和断点信息;

所述 IDE, 配置为为用户提供下发命令的交互界面。

2、 根据权利要求 1所述的软件调试装置, 其中, 所述断点信息包括断 点位置地址; 所述断点指令为原地跳转指令; 所述断点指令执行的间隙为 断点指令在原地执行跳转的任意两次的间隙。

3、 根据权利要求 2所述的软件调试装置, 其中, 所述驱动器, 还配置 为将来自所述 IDE的命令解析成具体的寄存器或存储器读写信号通过总线 发送给所述微处理器和 /或指令存储器。

4、 根据权利要求 3所述的的软件调试装置, 其中, 所述驱动器, 还配 置为将断点位置和断点处的真实指令存储到 IDE所在的上位机。

5、 根据权利要求 4所述的软件调试装置, 其中, 所述微处理器包括: 流水线和调试模块; 其中,

所述流水线, 配置为当执行到断点指令时, 解析发现当前指令为断点 指令后向所述调试模块发送通知, 并在解冻后对断点处的真实指令进行取 指;

所述调试模块, 配置为当接收到来自所述流水线的通知后, 冻结流水 线, 上报中断给驱动器, 并根据驱动器的触发解冻流水线。

6、 根据权利要求 5所述的软件调试装置, 其中, 所述调试模块, 配置 为当接收到来自所述流水线的通知后, 产生停止信号来冻结流水线。

7、 一种多断点的软件调试方法, 该软件调试方法包括:

微码集成开发环境 IDE在软件程序中设置断点;

驱动器获取软件程序中的断点信息, 根据所述断点信息将断点处的真 实指令替换成断点指令;

当执行到所述断点指令时, 微处理器上报中断给 IDE, 并冻结流水线; 驱动器根据 IDE下发的命令将所述断点指令换回真实指令;

微处理器解冻流水线, 对断点处的真实指令进行取指;

驱动器在断点指令执行的间隙将断点处的真实指令再次替换成断点指 令。

8、 根据权利要求 7所述的软件调试方法, 其中, 所述断点信息包括断 点位置地址。

9、 根据权利要求 8所述的软件调试方法, 其中, 该软件调试方法还包 括: 驱动器将断点位置和断点处的真实指令存储到 IDE所在的上位机。

10、根据权利要求 7所述的软件调试方法, 其中, 所述驱动器根据 IDE 下发的命令将所述断点指令换回真实指令, 微处理器解冻流水线, 对断点 处的真实指令进行取指, 驱动器在断点指令执行的间隙将断点处的真实指 令再次替换成断点指令为: 驱动器根据 IDE下发的单步操作命令或继续操 作命令, 将所述断点指令换回真实指令, 在换回真实指令时, 微处理器解 冻流水线, 对断点处的真实指令进行取指, 在对所述真实指令取指完成后, 在任意两次执行断点指令的间隙将断点处的真实指令再次替换成断点指 令。

11、 一种计算机存储介质, 存储有计算机程序, 该计算机程序用于执 行权利要求 7至 10任一所述的软件调试方法。

Description:
一种多断点的软件调试装置、 方法和计算机存储介质 技术领域

本发明涉及软件调试技术, 尤其涉及一种多断点的软件调试装置、 方 法和计算机存储介质。 背景技术

微处理器调试技术广泛地应用于软件故障定位 、 软件代码分析以及逆 向工程领域, 对微处理器的设计和使用有至关重要的作用。

对微处理器的软件进行调试一般包括以下两个 方面的内容: 在软件程 序中设置断点, 使程序执行到所设置的断点位置时产生中断并 停止执行; 用户可以对程序执行单步操作或使之摆脱中断 状态继续往下执行。

从上述内容可以看出, 断点技术是微处理器的软件调试中不可或缺并 有决定性作用的技术。 当前的断点技术主要分为两种:

第一种, 硬件断点的方案。 这种技术釆用若干个断点寄存器来存储断 点位置的指针, 在微处理器执行指令时, 根据配置不断将所执行指令的指 针与断点寄存器中的断点指针进行对比, 当发生匹配时, 产生中断并冻结 微处理器的流水线跳入特定程序段进行处理。 这种硬件断点的显而易见的 缺点就是, 由于断点寄存器的数量限制, 硬件断点只能实现数量有限的几 个断点, 在调试过程中会有很多的限制。

第二种, 软件多断点方案。 这技术当前使用非常广泛, 一般做法是将 微处理器执行的指令存储器中的断点位置的指 令替换成断点指令, 并将断 点处的真实指令备份到另一个存储器中, 当微处理器执行到断点位置时, 处理器流水线解析断点位置处的指令, 获知该断点位置处的指令为断点指 令后产生中断, 并冻结流水线跳入指定程序段进行处理, 在产生中断后使 用高级语言来解析该断点处的真实指令, 利用 PC++来使程序跳入断点后一 条指令开始执行。 上述软件多断点调试技术需要对断点位置的真 实指令进 行备份, 在替换回真实指令时需要高级语言来解析断点 处的真实指令, 如 此, 实现该方案需要消耗大量额外的存储空间来存 储备份断点处的真实指 令, 还需要替换流水线中指令, 实现困难。 发明内容

为解决现有存在的问题, 本发明实施例主要提供一种多断点的软件调 试装置、 方法和计算机存储介质, 简单易行的实现了多断点的软件调试, 同时节省了单板上的存储资源。

本发明实施例的技术方案是这样实现的:

本发明实施例提供了一种多断点的软件调试装 置, 该软件调试装置包 括: 驱动器、 微处理器、 指令存储器和微码集成开发环境 IDE; 其中, 所述驱动器, 配置为获取软件程序中的断点信息, 将所述断点信息发 送给指令存储器, 并根据指令存储器中的断点信息将断点处的真 实指令替 换成断点指令, 在上报中断给 IDE后, 根据 IDE下发的命令将所述断点指 令换回真实指令, 触发微处理器解冻流水线, 并在断点指令执行的间隙将 断点处的真实指令再次替换成断点指令;

所述微处理器, 配置为当执行到断点指令时, 通过驱动器上报中断给

IDE, 冻结流水线, 并根据驱动器的触发解冻流水线, 对断点处的真实指令 进行取指;

所述指令存储器, 配置为存储断点指令和断点信息;

所述 IDE, 配置为为用户提供下发命令的交互界面。

上述方案中, 所述断点信息包括断点位置地址; 所述断点指令为原地 跳转指令; 所述断点指令执行的间隙为断点指令在原地执 行跳转的任意两 次的间隙。 上述方案中, 所述驱动器, 还配置为将来自所述 IDE的命令解析成具 体的寄存器或存储器读写信号通过总线发送给 所述微处理器和 /或指令存储 器。

上述方案中, 所述驱动器, 还配置为将断点位置和断点处的真实指令 存储到 IDE所在的上位机。

上述方案中, 所述微处理器包括: 流水线和调试模块; 其中, 所述流水线, 配置为当执行到断点指令时, 解析发现当前指令为断点 指令后向所述调试模块发送通知, 并在解冻后对断点处的真实指令进行取 指;

所述调试模块, 配置为当接收到来自所述流水线的通知后, 冻结流水 线, 上报中断给驱动器, 并根据驱动器的触发解冻流水线。

上述方案中, 所述调试模块, 配置为当接收到来自所述流水线的通知 后, 产生停止信号来冻结流水线。

本发明实施例还提供了一种多断点的软件调试 方法, 该软件调试方法 包括:

微码集成开发环境 IDE在软件程序中设置断点;

驱动器获取软件程序中的断点信息, 根据所述断点信息将断点处的真 实指令替换成断点指令;

当执行到所述断点指令时, 微处理器上报中断给 IDE, 并冻结流水线; 驱动器根据 IDE下发的命令将所述断点指令换回真实指令;

微处理器解冻流水线, 对断点处的真实指令进行取指;

驱动器在断点指令执行的间隙将断点处的真实 指令再次替换成断点指 令。

上述方案中, 所述断点信息包括断点位置地址。

上述方案中的软件调试方法还包括: 驱动器将断点位置和断点处的真 实指令存储到 IDE所在的上位机。

上述方案中, 所述驱动器根据 IDE下发的命令将所述断点指令换回真 实指令, 微处理器解冻流水线, 对断点处的真实指令进行取指, 驱动器在 断点指令执行的间隙将断点处的真实指令再次 替换成断点指令为: 驱动器 根据 IDE下发的单步操作命令或继续操作命令, 将所述断点指令换回真实 指令, 在换回真实指令时, 微处理器解冻流水线, 对断点处的真实指令进 行取指, 在对所述真实指令取指完成后, 在任意两次执行断点指令的间隙 将断点处的真实指令再次替换成断点指令。

本发明实施例提供的一种计算机存储介质, 其中存储有计算机程序, 该计算机程序用于执行所述多断点的软件调试 方法。

本发明实施例提供了一种多断点的软件调试装 置、 方法和计算机存储 介质, 微码集成开发环境 ( IDE, Integrated Development Environment )在软 件程序中设置断点, 驱动器获取软件程序中的断点信息, 根据所述断点信 息将断点处的真实指令替换成断点指令, 当执行到所述断点指令时, 微处 理器上报中断给 IDE, 并冻结流水线, 驱动器根据 IDE下发的命令将所述 断点指令换回真实指令, 微处理器解冻流水线, 对断点处的真实指令进行 取指, 驱动器在断点指令执行的间隙将断点处的真实 指令再次替换成断点 指令; 如此, 本申请利用断点指令的特性和流水线冻结的空 隙来完成替换 指令的操作, 不仅可以在指令存储器中继续保留断点, 而且不用额外增加 单板上的存储空间来存储断点位置的指令, 节省大量的硬件存储资源的同 时也简化了调试步骤。 附图说明

图 1为本发明实施例提供的多断点的软件调试装 的结构示意图; 图 2 为本发明实施例提供的软件调试装置中微处理 器和指令存储器的 结构示意图; 图 3为本发明实施例提供的多断点的软件调试方 流程图; 图 4为本发明实施例提供的断点的软件设置方法 程图;

图 5为本发明实施例提供的执行单步操作的流程 ;

图 6为本发明实施例提供的执行继续操作的流程 。 具体实施方式

本发明实施例中, IDE 在软件程序中设置断点; 驱动器获取软件程序 中的断点信息, 根据所述断点信息将断点处的真实指令替换成 断点指令; 当执行到所述断点指令时, 微处理器上报中断给 IDE, 并冻结流水线; 驱 动器根据 IDE下发的命令将所述断点指令换回真实指令; 微处理器解冻流 水线, 对断点处的真实指令进行取指; 驱动器在断点指令执行的间隙将断 点处的真实指令再次替换成断点指令, 通过上述方法来实现多断点的软件 调试。

下面通过附图及具体实施例对本发明 #丈进一步的详细说明;

本发明实施例提供的多断点的软件调试装置的 结构如图 1 所示, 该软 件调试装置包括: 驱动器(Driver ) 10、微处理器 11、指令存储器 12和 IDE

13; 其中,

所述驱动器 10, 配置为获取软件程序中的断点信息, 将所述断点信息 发送给指令存储器, 并根据指令存储器中的断点信息将断点处的真 实指令 替换成断点指令,在上报中断给 IDE 13后,根据 IDE 13下发的命令将所述 断点指令换回真实指令, 触发微处理器 11解冻流水线, 并在断点指令执行 的间隙将断点处的真实指令再次替换成断点指 令;

所述微处理器 11, 配置为当执行到所述断点指令时, 通过驱动器 10上 报中断给 IDE 13, 冻结流水线, 并根据驱动器 10的触发解冻流水线, 对断 点处的真实指令进行取指;

所述指令存储器 12, 配置为存储断点指令和断点信息; 所述 IDE 13, 配置为为用户提供下发命令的交互界面;

其中, 所述断点信息包括断点位置地址;

所述断点指令为原地跳转指令, 所述断点指令执行的间隙为断点指令 在原地执行跳转的任意两次的间隙;

所述驱动器 10,还配置为将来自所述 IDE 13的命令解析成具体的寄存 器或存储器读写信号通过总线发送给所述微处 理器 11和 /或指令存储器 12; 所述命令包括: 设置断点命令以及执行单步( Step )操作或继续( Continue ) 操作等命令;

所述 IDE 13安装在上位机上, 在为微处理器 11和或指令存储器 12下 发命令后, 所述驱动器 10, 还配置为将断点位置和断点处的真实指令存储 到 IDE 13所在的上位机。

图 2所示为本发明实施例提供的微处理器 11和指令存储器 12的结构 图, 如图所示, 所述微处理器 11具体包括: 流水线 20和调试(Debug )模 块 21 ; 其中,

所述流水线 20, 配置为当执行到断点指令时, 解析发现当前指令为断 点指令后向所述调试模块 21发送通知, 并在解冻后对断点处的真实指令进 行取指;

所述调试模块 21, 配置为当接收到来自所述流水线 20的通知后, 冻结 流水线, 上报中断给驱动器 10, 并根据驱动器 10的触发解冻流水线;

所述调试模块 21, 具体配置为当接收到来自所述流水线 20的通知后, 产生停止(stall )信号来冻结流水线;

所述上位机上安装的 IDE 13可以通过总线操作所述调试模块 21 中的 寄存器来解除流水线冻结, 从而使微处理器 11可以执行单步操作或继续操 作;

所述上位机上安装的 IDE 13还可以通过总线来对指令存储器 12中存 储的指令内容进行修改, 所述指令存储器 12可以由 SRAM组成。

本发明实施例提供一种多断点的软件调试方法 , 如图 3 所示, 该软件 调试方法包括以下步骤:

步骤 301 : 在软件程序中设置断点;

具体的, 调试开始后, 用户通过 IDE在软件程序中设置断点, 断点的 数量和位置由用户根据需求来设定;

步骤 302: 驱动器获取软件程序中的断点信息,根据所述 断点信息将断 点处的真实指令替换为断点指令;

具体的, 首先, 驱动器从所述 IDE中获得用户在软件程序中设置断点 的命令以及断点信息; 所述断点信息包括断点位置地址; 然后, 根据所述 断点位置地址将软件程序中断点位置地址对应 的真实指令替换成指令存储 器中的断点指令, 所述断点指令为原地跳转指令;

本步骤还包括, 在将所述真实指令替换成断点指令后, 将所述断点位 置和所述断点处的真实指令存储到 IDE所在的上位机。

步骤 303: 当执行到所述断点指令时, 微处理器上报中断, 并冻结流水 线;

具体的, 当软件程序执行到所述断点指令时,微处理器 上报中断给 IDE 的同时冻结流水线; 由于所述断点指令本身为原地跳转指令, 因此, 断点 指令会跳转到微处理器当前的取指地址处, 同时会将流水线上延迟槽内的 指令都刷新成 NOP指令。

步骤 304: 驱动器根据 IDE下发的命令将所述断点指令换回真实指令, 微处理器解冻流水线, 对断点处的真实指令进行取指, 驱动器在断点指令 执行的间隙将断点处的真实指令再次替换成断 点指令;

具体的, 在上报中断后, 驱动器根据 IDE下发的单步操作命令或继续 操作命令, 将所述断点指令换回真实指令, 在换回真实指令时, 微处理器 解冻流水线, 执行所述断点指令, 同时完成对断点处的真实指令进行取指, 由于所述断点指令继续在原地跳转, 这样, 可以在任意两次执行断点指令 的间隙将断点处的真实指令再次替换成断点指 令。

图 4具体的呈现了微处理器软件断点的设置方法 程, 图中所示流程 为图 3中步骤 301与步骤 302的具体操作步骤, 包括:

步骤 401 : IDE开启调试模式;

具体的, IDE 开启调试模式后, 用户可以在软件程序中设置断点, 所 述断点的位置和数量由用户根据调试需要来确 定。

步骤 402: 驱动器从所述 IDE获得打断点的命令以及断点位置地址; 具体的, 用户通过 IDE设置断点之后, 驱动器从所述 IDE中获取断点 命令以及断点位置地址, 为下一步替换指令做准备。

步骤 403:驱动器根据所述断点位置地址将断点处的 实指令替换成断 点指令;

步骤 404: 驱动器将所述断点位置地址和所述真实指令备 份;

具体的, 驱动器将软件程序中的所有断点位置地址和所 述断点位置地 址处的真实指令都保存至 IDE所在上位机进行备份。

当微处理器执行到断点指令并上报中断后, IDE继续执行单步操作时, 具体流程如图 5所示;

首先,在 IDE开始执行单步操作时读取中断寄存器来判断 是否有中断, 当有中断时, 则表示微处理器已经产生中断并冻结了流水线 , 此时可以执 行单步操作, 当没有中断时, 表示微处理器的流水线正常工作, 此时不能 执行单步操作; 然后读取微处理器中当前取指地址, 并将所述取指地址和 所述驱动器记录存储的断点位置进行对比, 判断所述取指地址是否与所述 断点位置对应, 当所述取指地址与所述断点位置对应时, 则表示微处理器 当前执行的指令是原地跳转指令; 然后, 所述驱动器将所述取指地址 ex— 2pc处的指令替换为原来需执行 的真实指令, 本实施例中取指地址具体为 ex— 2pc; 接下来所述驱动器触发 微处理器执行所述原地跳转指令, 同时完成对所述取指地址处的真实指令 的取指; 所述驱动器再将所述 ex— 2pc处的真实指令替换回所述原地跳转指 令 Trap指令; 所述驱动器触发微处理器再一次执行所述原地 跳转指令, 最 后, 所述微处理器执行所述真实指令完成整个单步 操作;

如图所示, 当将所述当前的取指地址和所述驱动器中记录 的断点位置 进行对比, 所述取指地址与所述断点位置不对应时, 表示微处理器当前执 行的指令不是断点指令, 微处理器继续执行下一条指令, 完成操作。

图 6所示为当微处理器执行到断点指令并上报中 后, IDE执行继续 操作时的流程图, 具体流程与图 5所示相似;

首先,在 IDE开始执行继续操作时读取中断寄存器来判断 是否有中断, 当有中断时, 则表示微处理器已经产生中断并冻结了流水线 , 此时可以执 行继续操作, 当没有中断时, 表示微处理器的流水线正常工作, 此时不能 执行继续操作; 然后读取微处理器中当前取指地址, 并将所述取指地址和 所述驱动器记录存储的断点位置进行对比, 判断所述取指地址是否与所述 断点位置对应, 当所述取指地址与所述断点位置对应时, 则表示微处理器 当前执行的指令是原地跳转指令;

然后, 所述驱动器将所述取指地址 ex— 2pc处的指令替换为原来需执行 的真实指令, 本实施例中取指地址具体为 ex— 2pc; 接下来所述驱动器触发 微处理器执行所述原地跳转指令, 同时完成对所述取指地址处的真实指令 的取指; 所述驱动器再将所述 ex— 2pc处的真实指令替换回所述原地跳转指 令 Trap指令; 驱动器触发微处理器再一次执行所述原地跳转 指令, 最后, 驱动器触发微处理器全速执行软件程序, 完成整个继续操作。

本发明实施例所述多断点的软件调试方法如果 以软件功能模块的形式 实现并作为独立的产品销售或使用时, 也可以存储在一个计算机可读取存 储介质中。 基于这样的理解, 本领域内的技术人员应明白, 本申请的实施 例可提供为方法、 装置、 或计算机程序产品。 因此, 本申请可釆用硬件实 施例、 软件实施例、 或结合软件和硬件方面的实施例的形式。 而且, 本申 请可釆用在一个或多个其中包含有计算机可用 程序代码的计算机可用存储 介质上实施的计算机程序产品的形式, 所述存储介质包括但不限于 U盘、 移动硬盘、只读存储器( ROM, Read-Only Memory )、磁盘存储器、 CD-ROM, 光学存储器等;

这些计算机程序指令也可装载到计算机或其他 可编程数据处理设备 上, 使得在计算机或其他可编程设备上执行一系列 操作步骤以产生计算机 实现的处理, 从而在计算机或其他可编程设备上执行的指令 提供用于实现 本发明实施例方法流程中的一个流程或多个流 程和 /或方框图一个方框或 多个方框中指定的功能的步骤;

上述实施例提供的一种计算机存储介质, 存储有计算机程序, 该计算 机程序用于执行本发明实施例的多断点的软件 调试方法。

从上述实施例可以看出, 本发明实施例提供的微处理器软件多断点的 软件调试装置、 方法和计算机存储介质, 通过利用断点指令和冻结流水线 来实现微处理器软件调试过程中的多断点的灵 活设置, 比现有断点调试技 术更加节省单板上的存储空间, 调试方法也更加简便。

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