一种软单步系统中内存读写监控方法

文档序号:6504534阅读:109来源:国知局
一种软单步系统中内存读写监控方法
【专利摘要】本发明公开了一种软单步系统中内存读写监控方法,该方法通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术,适用于多(单)任务嵌入式系统的在线调试。本发明提供的软单步机制能有效解决没有硬单步机制的多任务系统进行在线内存监控。
【专利说明】一种软单步系统中内存读写监控方法

【技术领域】
[0001]本发明涉及软件系统技术,具体涉及软件系统中内存监控技术。

【背景技术】
[0002]现有的内存监控技术(比如著名的GDB)是通过观察点机制,指定一个任务要监控的内存区间,当检测到该任务读/写这段地址时,该任务不会读/写这段地址而是立刻进入异常,等待用户解析后删除该观察点任务才能继续运行。
[0003]这种方法对于调试单任务的系统是比较有效的,但存在以下几个缺点:
[0004]1.当要检测的内存频繁被读/写,而程序员只关心满足一定规则的内存操作时,GDB并不能很好的定义及判断所有规则,可能会使调试中的程序频繁的进入观察点异常,很多时候程序员并不关心这些异常。
[0005]2.在多任务系统中,任务间可能存在复杂的关联,当一个任务因为监控内存而进入异常,可能会影响其他任务的运行,从而影响整个系统的正常运行,当这种异常程序员不关心时,程序员不得不重新启动系统调试。
[0006]综上所述,内存监控技术所存在的这些缺点将会极大的影响多任务嵌入式系统软件的调试进度。


【发明内容】

[0007]本发明针对现有内存监控技术所存在的问题,而提供一种全新的软单步系统中内存读写监控方法。监控方案通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术,有效解决现有内存监控技术所存在的缺陷,并适用于多(单)任务嵌入式系统的在线调试。
[0008]为了达到上述目的,本发明采用如下的技术方案:
[0009]一种软单步系统中内存读写监控方法,所述监控方法包括如下步骤:
[0010](I)操作系统初始化后,内存读写监控前挂载观察点异常处理函数、断点异常处理函数及任务切换钩子函数;
[0011](2)设置要监控的内存区间,并设置内存观察点包含要监控的内存区间;
[0012](3)系统正常运行中,如果发生观察点异常则跳到步骤(4)、如果发生断点异常则跳到步骤(14),如果发生任务切换则跳到步骤(13);
[0013](4)系统读写被监控的内存会产生观察点异常,并自动跳到观察点异常处理函数进行后续步骤处理;
[0014](5)分析导致观察点异常的指令得到内存访问的各种参数,包括异常地址、内存访问的方式、地址、长度、数值;
[0015](6)匹配要监控的内存区间,如果不匹配则跳到步骤(12);
[0016](7)匹配注册规则及补丁规则,如果不匹配则跳到步骤(12);
[0017](8)分析任务堆栈得到的任务调用关系,并记录内存访问信息;
[0018](9)计算下一个PC地址为软单步断点地址;
[0019](10)以当前任务为索引在HASH表中记录切换信息;
[0020](11)清除观察点,设置软单步断点;
[0021](12)异常返回,跳到步骤(3)程序正常运行;
[0022](13)发生任务切换,且任务切换后新旧任务不一致,则先索引上个任务获得切换信息,根据切换信息清除上个任务的软单步断点并恢复观察点,再索引新任务获得切换信息,根据切换信息设置新任务的观察点及软单步断点,处理完后跳到步骤(3)程序正常运行;
[0023](14)系统产生软单步断点异常,并自动跳到断点异常处理函数进行后续步骤处理;
[0024](15)以当前任务为索引在切换信息的HASH表中查找切换信息,再根据匹配的切换信息清除软单步断点,清除切换信息,恢复观察点配置,异常返回,跳到步骤(3)系统正常运行以便继续监视步骤(2)中设置的内存区间;
[0025](16)当不再需要监控内存时,清除所有任务中该观察点切换信息,取消硬单步,清除观察点。
[0026]在本发明的优选实例中,所述步骤(7)中注册规则是程序中已经注册的规则,补丁规则是通过补丁技术重新实现的规则,注册规则和补丁规则可以根据内存访问的方式、地址、大小、数值及各种全局变量进行组合匹配。
[0027]进一步的,所述步骤(8)中记录内存访问信息的方式有两种:第一种以〈任务ID,异常地址 > 为HASH索引统计内存各种访问方式的次数;第二种循环记录任务ID、异常地址、内存访问的方式、地址、长度、数值和计算堆栈得到的任务调用关系。
[0028]进一步的,所述步骤(10)中切换信息包括任务ID、断点地址、原断点指令、观察点配置。
[0029]本发明通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术,该监控技术适用于多(单)任务嵌入式系统的在线调试,其能够有效提高多任务嵌入式系统软件的调试进度。
[0030]同时,本发明提供方案能有效解决没有硬单步机制的多任务系统进行在线内存监控。

【专利附图】

【附图说明】
[0031 ] 以下结合附图和【具体实施方式】来进一步说明本发明。
[0032]图1为本发明实施的流程图。

【具体实施方式】
[0033]为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
[0034]本实例以MIPS3274K运行VxWorks操作系统为例介绍本发明方案具体的实施过程,具体实施步骤如下,参考图1:
[0035]1.Vxfforks初始化结束后,用intVecSet挂载IV_WATCH_VEC观察点异常处理函数,用intVecSet挂载IV_BP_VEC断点异常处理函数,用taskSwitchHookAdd挂载任务切换钩子函数;
[0036]2.设置要监控的内存区间,通过CPU的WatchHi寄存器设置内存观察点的基址掩码,WatchLo寄存器设置内存观察点基址及访问模式,当访问的内存&基址掩码=基址&基址掩码时产生观察点异常,因此实际设置在观察点的区间可能需要大于要监控的内存区间;
[0037]3.系统正常运行中,如果发生观察点异常则跳到步骤(4)、如果发生断点异常则跳到步骤(14),如果发生任务切换则跳到步骤(13);
[0038]4.系统读写被监控的内存会产生观察点异常,并进入后续观察点异常处理;
[0039]5.依据MIPS3274K指令集分析导致观察点异常的指令得到内存访问的方式、地址、长度、数值等参数;比如对于Ib指令,指令格式为(op RS RT |D),因此访问方式为读,地址是寄存器RS+立即数D,长度为I ;又比如sw指令,指令格式为(op RS RT D),因此访问方式为写,地址是寄存器RS+立即数D,数值是寄存器RT,长度为4 ;
[0040]6.计算异常时内存访问区间和要监控的内存区间是否有交集,如果没有交集说明不匹配,则跳到步骤12;
[0041]7.匹配注册规则及补丁规则,注册规则是指系统静态编译时已经实现并注册的规贝U,补丁规则是通过补丁技术动态加载的规则,注册规则和补丁规则可以根据内存访问的方式、地址、大小、数值及各种全局变量进行组合匹配,如果不匹配则跳到步骤12 ;比如要监控特定地址被改写为特定的值,可以通过注册规则来实现,当不希望重新编译整个系统时可以通过补丁规则来实现,补丁技术为本领域技术人员熟知技术,不在本发明内详述。
[0042]8.分析任务堆栈得到的任务调用关系,并记录内存访问信息,这里提供两种记录方式,第一种以〈任务ID,异常地址 > 为HASH索引统计内存各种访问方式的次数,HASH索引的算法是计算任务ID和异常地址的CRC32校验值;第二种循环记录任务ID、异常地址、内存访问的方式、地址、大小、数值和计算堆栈得到的任务调用关系;
[0043]9.计算下一个PC地址为软单步断点地址,对于非跳转延时槽指令,下一个PC地址就是当前PC+1 ;
[0044]10.以当前任务ID的CRC32校验值为索引在HASH表中记录切换信息,切换信息包括任务ID、断点地址、原断点指令、观察点配置;
[0045]11.通过清除WatchH1、WatchLo寄存器清除观察点,通过改写软单步断点地址的指令为break设置软单步断点;
[0046]12.异常返回,跳到步骤3系统正常运行;
[0047]13.如果存在任务切换,且任务切换后新旧任务不一致,则先索引上个任务获得切换信息,如果存在上个任务切换信息则根据切换信息恢复原断点指令清除上个任务的软单步断点并设置WatchH1、WatchLo寄存器恢复观察点,再索引新任务获得切换信息,如果存在新任务切换信息则根据切换信息设置WatchH1、WatchLo寄存器改写软单步断点地址的指令设置新任务的观察点及软单步断点,处理完后跳到步骤3程序正常运行;
[0048]14.系统产生软单步断点异常,进入后续软单步断点异常处理;
[0049]15.以当前任务为索引在切换信息的HASH表中查找切换信息,清除软单步断点,清除切换信息,恢复观察点配置,异常返回,跳到步骤3系统正常运行以便继续监视步骤(2)中设置的内存区间。
[0050]16.当不再需要监控内存时,清除所有任务中该观察点切换信息,取消软单步断点,清除观察点。
[0051]上述实例通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术。该监控方案应用于多任务系统中,当一个任务因为监控内存而进入异常时,能够有效的处理这些异常,而无需重新启动系统调试,有效提高系统软件的调试进度。
[0052]同时,基于上述实例方案,所有有软单步机制的CPU都能变通实现,其原理都如上所述,此处不加以赘述。
[0053]以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
【权利要求】
1.一种软单步系统中内存读写监控方法,其特征在于,所述监控方法包括如下步骤: (1)操作系统初始化后,内存读写监控前挂载观察点异常处理函数、断点异常处理函数及任务切换钩子函数; (2)设置要监控的内存区间,并设置内存观察点包含要监控的内存区间; (3)系统正常运行中,如果发生观察点异常则跳到步骤(4)、如果发生断点异常则跳到步骤(14),如果发生任务切换则跳到步骤(13); (4)系统读写被监控的内存会产生观察点异常,并自动跳到观察点异常处理函数进行后续步骤处理; (5)分析导致观察点异常的指令得到内存访问的各种参数,包括异常地址、内存访问的方式、地址、长度、数值; (6)匹配要监控的内存区间,如果不匹配则跳到步骤(12); (7)匹配注册规则及补丁规则,如果不匹配则跳到步骤(12); (8)分析任务堆栈得到的任务调用关系,并记录内存访问信息; (9)计算下一个PC地址为软单步断点地址; (10)以当前任务为索引在HASH表中记录切换信息; (11)清除观察点,设置软单步断点; (12)异常返回,跳到步骤(3)系统正常运行; (13)发生任务切换,且任务切换后新旧任务不一致,则先索引上个任务获得切换信息,根据切换信息清除上个任务的软单步断点并恢复观察点,再索引新任务获得切换信息,根据切换信息设置新任务的观察点及软单步断点,处理完后跳到步骤(3)系统正常运行; (14)系统产生软单步断点异常,并自动跳到断点异常处理函数进行后续步骤处理; (15)以当前任务为索引在切换信息的HASH表中查找切换信息,再根据匹配的切换信息清除软单步断点,清除切换信息,恢复观察点配置,异常返回,跳到步骤(3)系统正常运行以便继续监视步骤(2)中设置的内存区间; (16)当不再需要监控内存时,清除所有任务中该观察点切换信息,取消硬单步,清除观察点。
2.根据权利要求1所述的一种软单步系统中内存读写监控方法,其特征在于,所述步骤(7)中注册规则是程序中已经注册的规则,补丁规则是通过补丁技术重新实现的规则,注册规则和补丁规则可以根据内存访问的方式、地址、大小、数值及各种全局变量进行组合匹配。
3.根据权利要求1所述的一种软单步系统中内存读写监控方法,其特征在于,所述步骤(8)中记录内存访问信息的方式有两种:第一种以〈任务ID,异常地址 > 为HASH索引统计内存各种访问方式的次数;第二种循环记录任务ID、异常地址、内存访问的方式、地址、长度、数值和计算堆栈得到的任务调用关系。
4.根据权利要求1所述的一种软单步系统中内存读写监控方法,其特征在于,所述步骤(10)中切换信息包括任务ID、断点地址、原断点指令、观察点配置。
【文档编号】G06F11/36GK104239201SQ201310248057
【公开日】2014年12月24日 申请日期:2013年6月20日 优先权日:2013年6月20日
【发明者】汪革, 苟利平, 王仁雷, 武琦 申请人:上海博达数据通信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1