[go: up one dir, main page]

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

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

Info

Publication number
CN104239201B
CN104239201B CN201310248057.9A CN201310248057A CN104239201B CN 104239201 B CN104239201 B CN 104239201B CN 201310248057 A CN201310248057 A CN 201310248057A CN 104239201 B CN104239201 B CN 104239201B
Authority
CN
China
Prior art keywords
task
observation
point
single step
breakpoint
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310248057.9A
Other languages
English (en)
Other versions
CN104239201A (zh
Inventor
汪革
苟利平
王仁雷
武琦
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHANGHAI BAUD DATA COMMUNICATION CO Ltd
Original Assignee
SHANGHAI BAUD DATA COMMUNICATION CO Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SHANGHAI BAUD DATA COMMUNICATION CO Ltd filed Critical SHANGHAI BAUD DATA COMMUNICATION CO Ltd
Priority to CN201310248057.9A priority Critical patent/CN104239201B/zh
Publication of CN104239201A publication Critical patent/CN104239201A/zh
Application granted granted Critical
Publication of CN104239201B publication Critical patent/CN104239201B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种软单步系统中内存读写监控方法,该方法通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术,适用于多(单)任务嵌入式系统的在线调试。本发明提供的软单步机制能有效解决没有硬单步机制的多任务系统进行在线内存监控。

Description

一种软单步系统中内存读写监控方法
技术领域
本发明涉及软件系统技术,具体涉及软件系统中内存监控技术。
背景技术
现有的内存监控技术(比如著名的GDB)是通过观察点机制,指定一个任务要监控的内存区间,当检测到该任务读/写这段地址时,该任务不会读/写这段地址而是立刻进入异常,等待用户解析后删除该观察点任务才能继续运行。
这种方法对于调试单任务的系统是比较有效的,但存在以下几个缺点:
1.当要检测的内存频繁被读/写,而程序员只关心满足一定规则的内存操作时,GDB并不能很好的定义及判断所有规则,可能会使调试中的程序频繁的进入观察点异常,很多时候程序员并不关心这些异常。
2.在多任务系统中,任务间可能存在复杂的关联,当一个任务因为监控内存而进入异常,可能会影响其他任务的运行,从而影响整个系统的正常运行,当这种异常程序员不关心时,程序员不得不重新启动系统调试。
综上所述,内存监控技术所存在的这些缺点将会极大的影响多任务嵌入式系统软件的调试进度。
发明内容
本发明针对现有内存监控技术所存在的问题,而提供一种全新的软单步系统中内存读写监控方法。监控方案通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术,有效解决现有内存监控技术所存在的缺陷,并适用于多(单)任务嵌入式系统的在线调试。
为了达到上述目的,本发明采用如下的技术方案:
一种软单步系统中内存读写监控方法,所述监控方法包括如下步骤:
(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)当不再需要监控内存时,清除所有任务中该观察点切换信息,取消硬单步,清除观察点。
在本发明的优选实例中,所述步骤(7)中注册规则是程序中已经注册的规则,补丁规则是通过补丁技术重新实现的规则,注册规则和补丁规则可以根据内存访问的方式、地址、大小、数值及各种全局变量进行组合匹配。
进一步的,所述步骤(8)中记录内存访问信息的方式有两种:第一种以<任务ID,异常地址>为HASH索引统计内存各种访问方式的次数;第二种循环记录任务ID、异常地址、内存访问的方式、地址、长度、数值和计算堆栈得到的任务调用关系。
进一步的,所述步骤(10)中切换信息包括任务ID、断点地址、原断点指令、观察点配置。
本发明通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术,该监控技术适用于多(单)任务嵌入式系统的在线调试,其能够有效提高多任务嵌入式系统软件的调试进度。
同时,本发明提供方案能有效解决没有硬单步机制的多任务系统进行在线内存监控。
附图说明
以下结合附图和具体实施方式来进一步说明本发明。
图1为本发明实施的流程图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本实例以MIPS3274K运行VxWorks操作系统为例介绍本发明方案具体的实施过程,具体实施步骤如下,参考图1:
1.VxWorks初始化结束后,用intVecSet挂载IV_WATCH_VEC观察点异常处理函数,用intVecSet挂载IV_BP_VEC断点异常处理函数,用taskSwitchHookAdd挂载任务切换钩子函数;
2.设置要监控的内存区间,通过CPU的WatchHi寄存器设置内存观察点的基址掩码,WatchLo寄存器设置内存观察点基址及访问模式,当访问的内存&基址掩码=基址&基址掩码时产生观察点异常,因此实际设置在观察点的区间可能需要大于要监控的内存区间;
3.系统正常运行中,如果发生观察点异常则跳到步骤(4)、如果发生断点异常则跳到步骤(14),如果发生任务切换则跳到步骤(13);
4.系统读写被监控的内存会产生观察点异常,并进入后续观察点异常处理;
5.依据MIPS3274K指令集分析导致观察点异常的指令得到内存访问的方式、地址、长度、数值等参数;比如对于lb指令,指令格式为(op||RS||RT||D),因此访问方式为读,地址是寄存器RS+立即数D,长度为1;又比如sw指令,指令格式为(op||RS||RT||D),因此访问方式为写,地址是寄存器RS+立即数D,数值是寄存器RT,长度为4;
6.计算异常时内存访问区间和要监控的内存区间是否有交集,如果没有交集说明不匹配,则跳到步骤12;
7.匹配注册规则及补丁规则,注册规则是指系统静态编译时已经实现并注册的规则,补丁规则是通过补丁技术动态加载的规则,注册规则和补丁规则可以根据内存访问的方式、地址、大小、数值及各种全局变量进行组合匹配,如果不匹配则跳到步骤12;比如要监控特定地址被改写为特定的值,可以通过注册规则来实现,当不希望重新编译整个系统时可以通过补丁规则来实现,补丁技术为本领域技术人员熟知技术,不在本发明内详述。
8.分析任务堆栈得到的任务调用关系,并记录内存访问信息,这里提供两种记录方式,第一种以<任务ID,异常地址>为HASH索引统计内存各种访问方式的次数,HASH索引的算法是计算任务ID和异常地址的CRC32校验值;第二种循环记录任务ID、异常地址、内存访问的方式、地址、大小、数值和计算堆栈得到的任务调用关系;
9.计算下一个PC地址为软单步断点地址,对于非跳转延时槽指令,下一个PC地址就是当前PC+1;
10.以当前任务ID的CRC32校验值为索引在HASH表中记录切换信息,切换信息包括任务ID、断点地址、原断点指令、观察点配置;
11.通过清除WatchHi、WatchLo寄存器清除观察点,通过改写软单步断点地址的指令为break设置软单步断点;
12.异常返回,跳到步骤3系统正常运行;
13.如果存在任务切换,且任务切换后新旧任务不一致,则先索引上个任务获得切换信息,如果存在上个任务切换信息则根据切换信息恢复原断点指令清除上个任务的软单步断点并设置WatchHi、WatchLo寄存器恢复观察点,再索引新任务获得切换信息,如果存在新任务切换信息则根据切换信息设置WatchHi、WatchLo寄存器改写软单步断点地址的指令设置新任务的观察点及软单步断点,处理完后跳到步骤3程序正常运行;
14.系统产生软单步断点异常,进入后续软单步断点异常处理;
15.以当前任务为索引在切换信息的HASH表中查找切换信息,清除软单步断点,清除切换信息,恢复观察点配置,异常返回,跳到步骤3系统正常运行以便继续监视步骤(2)中设置的内存区间。
16.当不再需要监控内存时,清除所有任务中该观察点切换信息,取消软单步断点,清除观察点。
上述实例通过CPU的观察点机制、断点机制及先进的补丁技术实现了全新的内存监控技术。该监控方案应用于多任务系统中,当一个任务因为监控内存而进入异常时,能够有效的处理这些异常,而无需重新启动系统调试,有效提高系统软件的调试进度。
同时,基于上述实例方案,所有有软单步机制的CPU都能变通实现,其原理都如上所述,此处不加以赘述。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

Claims (4)

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、断点地址、原断点指令、观察点配置。
CN201310248057.9A 2013-06-20 2013-06-20 一种软单步系统中内存读写监控方法 Active CN104239201B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310248057.9A CN104239201B (zh) 2013-06-20 2013-06-20 一种软单步系统中内存读写监控方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310248057.9A CN104239201B (zh) 2013-06-20 2013-06-20 一种软单步系统中内存读写监控方法

Publications (2)

Publication Number Publication Date
CN104239201A CN104239201A (zh) 2014-12-24
CN104239201B true CN104239201B (zh) 2018-08-24

Family

ID=52227317

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310248057.9A Active CN104239201B (zh) 2013-06-20 2013-06-20 一种软单步系统中内存读写监控方法

Country Status (1)

Country Link
CN (1) CN104239201B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107015846B (zh) * 2017-04-14 2020-08-14 直觉系统科技(昆山)有限公司 一种实现处理器仿真核的仿真方法及装置
CN110727577B (zh) * 2019-08-29 2023-06-09 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 嵌入式系统软件中概率复现问题的调试方法、系统及介质
CN111506338B (zh) * 2020-03-03 2023-08-11 深圳震有科技股份有限公司 一种函数级热补丁方法、装置、智能终端及存储介质
CN117724985B (zh) * 2024-02-08 2024-04-30 此芯科技(武汉)有限公司 一种内存访问行为监控方法、装置、存储介质及电子设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1776644A (zh) * 2005-12-09 2006-05-24 中兴通讯股份有限公司 一种基于有限状态机的对内存变量改写进行监控的方法
CN1885275A (zh) * 2005-06-20 2006-12-27 中兴通讯股份有限公司 一种嵌入式系统及其实时内存监控处理方法
CN101178685A (zh) * 2007-09-27 2008-05-14 上海大学 带特殊功能寄存器断点的增强型微处理器片上动态跟踪方法
CN101625659A (zh) * 2009-07-03 2010-01-13 无敌科技(西安)有限公司 嵌入式系统实时监控内存的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101192193A (zh) * 2006-11-27 2008-06-04 国际商业机器公司 用于实现观察点的方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1885275A (zh) * 2005-06-20 2006-12-27 中兴通讯股份有限公司 一种嵌入式系统及其实时内存监控处理方法
CN1776644A (zh) * 2005-12-09 2006-05-24 中兴通讯股份有限公司 一种基于有限状态机的对内存变量改写进行监控的方法
CN101178685A (zh) * 2007-09-27 2008-05-14 上海大学 带特殊功能寄存器断点的增强型微处理器片上动态跟踪方法
CN101625659A (zh) * 2009-07-03 2010-01-13 无敌科技(西安)有限公司 嵌入式系统实时监控内存的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种实时多任务软件调试器的实现;熊光泽 等;《计算机应用》;19951031;全文 *

Also Published As

Publication number Publication date
CN104239201A (zh) 2014-12-24

Similar Documents

Publication Publication Date Title
US8245195B2 (en) System and method for debugging a computer program
US8572577B2 (en) Monitoring changes to data within a critical section of a threaded program
JP2749528B2 (ja) エラー解析用のトレーサシステム
US9846717B2 (en) Software security via control flow integrity checking
CN102346708B (zh) 一种调试器及其调试方法
US8997059B2 (en) Reverse debugging
CN110580226B (zh) 操作系统级程序的目标码覆盖率测试方法、系统及介质
US20080215920A1 (en) Program code trace signature
CN100375060C (zh) 一种嵌入式系统及其实时内存监控处理方法
CN111221800B (zh) 数据库迁移方法、装置、电子设备及存储介质
US8423970B2 (en) Method, computer program product, and hardware product for handling breakpoints in an asynchronous debug model
JP5905911B2 (ja) シングルステップ実行を用いる診断コード
BR112013019824A2 (pt) aparelho e método de processamento de dados, método para compilar um aplicativo para execução por um processador de dados, produto de programa de computador, e, máquina virtual
CN101295279A (zh) 多线程环境下的调试程序的方法和系统
US8806447B2 (en) Step-type operation processing during debugging by machine instruction stepping concurrent with setting breakpoints
CN104239201B (zh) 一种软单步系统中内存读写监控方法
CN105740120A (zh) 基于共享内存的软件运行过程实时监测与控制方法及系统
US20120110553A1 (en) Implementing a step-type operation during debugging of code using internal breakpoints
US20120151267A1 (en) System for extending use of a data address break point register to implement multiple watch points
CN101685420B (zh) 多线程调试方法和装置
US20130185602A1 (en) Heap dump occurrence detection
US9262301B2 (en) Observability control with observability information file
CN108027762B (zh) 生成和处理指示处理电路的指令执行的跟踪流的装置和方法
CN104239200B (zh) 一种硬单步系统中内存读写监控方法
CN1329839C (zh) 一种计算机cpu抗干扰的设计方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20141224

Assignee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Assignor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Contract record no.: X2020980003092

Denomination of invention: Memory read-write monitoring method in flexible single-step system

Granted publication date: 20180824

License type: Exclusive License

Record date: 20200615

PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Memory read-write monitoring method in flexible single-step system

Effective date of registration: 20200615

Granted publication date: 20180824

Pledgee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Pledgor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Registration number: Y2020980003093

PE01 Entry into force of the registration of the contract for pledge of patent right
EC01 Cancellation of recordation of patent licensing contract

Assignee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Assignor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Contract record no.: X2020980003092

Date of cancellation: 20210809

EC01 Cancellation of recordation of patent licensing contract
PC01 Cancellation of the registration of the contract for pledge of patent right

Date of cancellation: 20210809

Granted publication date: 20180824

Pledgee: Shanghai Puchuang Longke Finance Leasing Co.,Ltd.

Pledgor: SHANGHAI BAUD DATA COMMUNICATION Co.,Ltd.

Registration number: Y2020980003093

PC01 Cancellation of the registration of the contract for pledge of patent right