一种仿真工具的c语言单步调试实现方法

文档序号:6585324阅读:1061来源:国知局
专利名称:一种仿真工具的c语言单步调试实现方法
技术领域
本技术主要应用于智能卡软件开发仿真调试工具领域。
背景技术
汇编和C是目前智能卡软件开发使用的两种主要编程语言,由于C语言的可读性 强、可移植性好而得到广泛应用。但C语言相对汇编语言要复杂的多,给仿真调试工具的开 发增加了不少困难,与汇编语言相比较,C语言的一个单步调试命令(包括单步进入Mep In、单步跨越Mep Over),对应于汇编语言会执行若干条指令,而且其中还可能有跳转分 支,不同的顺序执行指令和跳转分支指令相结合,使得C语言的调试非常复杂。

发明内容
本发明首先由仿真器实现基本调试命令,然后由编译器对程序代码解释生成代码 行/程序地址对应表以及跳转表,最后由IDE实现具体调试逻辑。仿真器实现调试命令如下乂印In 单步,进入函数;乂印Over 单步,跳过函数;Run to 执行到具体一个程序代码地址。另外,硬件有两种状态running和stop,在调试过程中需要返回给IDE。编译器生成的代码行/程序地址对应表内容包括FileName 代码所在文件;LineIndex 代码所在行;LineAddressRange 代码地址范围,包括起始地址MartAddress和结束地址 EndAddress0IDE根据这些信息来实现调试逻辑,并将当前调试行显示给用户。跳转表内容包括InsName 跳转指令名称;AsmFile C文件编译生成的中间汇编文件名;AsmLine 对应中间汇编文件的行号;hsAddr 跳转指令所在地址。本发明用来解决C语言程序单步调试的问题。方案主要由两方面构成1)通过将 汇编单步命令乂印In/Step Over和运行指定地址Run to命令相结合,来处理C语言代码 行地址问题;幻通过仿真器状态控制,来确定何时完成一次单步调试。使用该方案的好处 是,除了可以支持C语言调试外,也能较好的兼容汇编语言调试。


图1 :C语言程序单步调试逻辑流程图
图2 仿真器控制逻辑流程图
具体实施例方式1、C语言程序单步调试行地址处理方法对于汇编语言来说,由于每一行代码就对应着一条汇编语句,所以很容易处理,直 接发送Mep In/Step Over命令即可。然而,对于C语言,每一行代码可能对应多条汇编语句,并且这多条汇编语句可能 不连续,甚至存在多个跳转语句,如何跳出该行C代码只有执行时才能确定。因此,不能简 单的将调试命令一对一的翻译,而需要另行建立一套逻辑方法来处理。详细流程步骤如下1)获取当前程序指针PC和当前调试代码行地址范围AddrRange,转入步骤2);2)比较当前程序指针PC和当前调试代码行地址范围AddrRange,若PC在 AddrRange范围内转入步骤3),否则转入步骤4);3)直接发送乂印In/Step Over单步命令,转入步骤9);4)查找跳转地址表,找出距离当前程序PC最近的跳转地址JmpAddr,转入步骤 5);5)比较跳转地址JmpAddr和代码行地址范围AddrRange,若JmpAddr在AddrRange 范围内转入步骤6),否则转入步骤7); 6) Run to地址设置为JmpAddr,转入步骤8);7) Run to地址设置为AddrRange的结束地址,转入步骤8);8)发送Run to命令,转入步骤9);9)结束本次调试。2、对仿真器状态的控制方法使用两个线程实现对仿真器状态的控制 主线程,负责给仿真器发送调试命令,启动监视线程; 监视线程,监测到仿真器是否处于停止状态。如果仿真器停止,则判断是否需要 重复当前调试过程。如果不需要则向主窗口发送仿真器停止的消息,否则重复当前调试过程。判断是否重复当前调试过程的依据是当前光标所在代码行与调试程序地址所在 代码行是否相同。如果相同,则需要重复调试过程;如果不同,则发送停止消息。详细流程步骤如下1)进入主线程,并且调试窗口为静止状态,转入步骤2);2)启动监视线程,监视线程启动成功转入步骤3),否则转入步骤8);3)监视线程向仿真器发送状态查询命令,获取当前仿真器状态,转入步骤4);4)判断仿真器状态,若仿真器状态为停止则转入步骤5),否则返回步骤3);5)判断是否重复当前调试过程,是则转入步骤6),否则转入步骤7);6)发送调试命令并停止监视线程,转入步骤1);7)通知主窗口并停止监视线程,转入步骤1);8)退出调试。
权利要求
1.一种仿真工具的C语言单步调试实现方法,其特征是采用汇编乂印In/Step Over 和Rimto处理C语言代码行地址,并且通过控制仿真器在合适的时候停止运行,来实现C语言单步调试。
2.如权利1所述一种仿真工具的C语言单步调试实现方法,其特征是通过比较程序 当前运行地址和C语言代码行的地址范围来决定是使用乂印In/Step Over命令还是使用 Run to命令,以及Run to的具体地址。
3.如权利1所述一种仿真工具的C语言单步调试实现方法,其特征是比较当前光标 所在代码行和调试程序地址所在代码行是否相同,判断是重复执行当前调试过程还是发送 停止消息,来完成一次单步调试。
全文摘要
本发明提供了一种单步调试的实现方法,通过将汇编的单步Step In/Step Over和运行到指定地址Run to相结合处理C代码行,以及控制仿真器在合适时候停止运行的方式,较好地解决了C语言程序仿真单步调试的问题。
文档编号G06F11/36GK102110046SQ20091024348
公开日2011年6月29日 申请日期2009年12月23日 优先权日2009年12月23日
发明者韩磊 申请人:北京中电华大电子设计有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1