内存信息自动监控器的设计与实现

内存信息自动监控器的设计与实现【摘要】很多应用程序需要在调试或运行期间监控内存变量信息,重复地编写输出代码是一种资源浪费。文章设计实现一个可以对内存变量信息进行自动文本化输出的软件监控器,来解决这一问题。该软件对变量类型声明文件进行文本分析,在内存建立对应的类型表达模型,然后将该类型模型与内存数据区进行绑定,以此确定文本化输出内容。该软件以动态连接库(DLL)的形式提供,接口简洁,使用方便,输出界面友好,可在Windows源程序中调用。【关键词】内存信息;自动监控;动态链接库;软件复用【中图分类号】TP391.9【文献标识码】A1引言监控内存变量信息是很多应用程序的常规需要,其作用有两个方面:一是程序开发期间进行调试;二是在程序投入正式运行后监控系统运行状态。对第一种情况,可以利用开发环境提供的调试工具进行,但并不是总能满足要求,比如进行飞行仿真程序调试时,需要动态连续地而不是单步地观察内存变量信息,此时调试工具就无法满足要求,必需编写输出代码;对第二种情况,调试工具就根本不能使用。重复地机械地编写输出代码,是当前采用的通常做法。本文设计实现一个可以对内存变量信息进行自动文本化输出的软件(以下称自动监控器或监控器),来解决这一代码重复编写问题。2自动监控器的接口形式及使用方法2.1接口形式自动监控器的接口以动态链接库(DLL)[3]的形式提供:(1)头文件automonitor.h;(2)Lib文件automonitor.lib;(4)DLL文件automonitor.dll。头文件automonitor.h中的接口声明(C++)为:classAutoMonitor{public:AutoMonitor(constchar*type,void*buf);/*建立监控器*/~AutoMonitor();/*释放监控器*/voidUpdate();/*更新显示*/private:void*m_pvoid;/*私有不可访问成员*/}。2.2使用方法步骤1(定义“文本化类型”):在MTypes.h(文本化类型文件)中定义“文本化类型”(见第3节);structMType{/*文本化类型*/intmonth;//=“月份”:指定成员文本名,以“月份”为标题显示doublesales;//销售额:未指定成员文本名,以原成员名“sales”为标题显示doubleprofit;//=“利润(万元)”:指定成员文本名,以“利润(万元)”为标题显示};步骤2(创建自动监控器):在C++源程序中添加如下语句:MTypebuf;/*待监控变量*/AutoMonitormonitor(“MTypes.h::MType”,&buf);/*创建自动监控器*/步骤3(更新显示):每调用一次monitor.Update(),buf数据以以下文本形式显示(示意):月份:5sales:100.5利润(万元):10.5。3文本化类型的格式文本化类型遵循C++语言结构体类型语法,但做了如下约束:(1)必须有结构体名;(2)每个数据成员可含对应的文本标题。其定义格式是:文本化类型文件:文本化类型列表;文本化类型列表:文本化类型文本化类型列表;文本化类型:struct结构体名{成员列表};成员列表:成员成员列表;成员:成员类型成员名;[成员文本名];成员类型:float|double|char|short|int|long|unsignedchar|unsignedshort|unsignedint|unsignedlong|结构体名;成员名:C++合法标识符|成员名[正整数];成员文本名://=“字符串”。4文本化类型的内存映射对第3节定义的文本化类型进行文本分析,在内存建立起对应的内存表达,如图1所示。其中,成员类型为:0--无效;1-float;2-double;3-char;4-short;5-int;6-long;7-unsignedchar;8-unsignedshort;9-unsignedint;10-unsignedlong。成员偏移量为该成员第一个字节相对于类型头的字节数。成员文本名为指向字符串的指针,当文本化类型未指定成员文本名时,成员文本名取成员名。为实现节省存储资源,字符串取共享模式。5自动监控器实现原理自动监控器的实现原理如图1所示。类AutoMonitor的构造函数依据第一个参数指定的文件名和结构体类型名,到文件中解析相关的文本化类型,在内存建立类型表达;然后与第二个参数指定的内存信息区进行绑定,形成m_pvoid。此后,Update()依据m_pvoid对内存信息区进行文本化输出。在DLL内实现一个CTreeCtrl,根节点下的每一项对应一个结构体成员,树节点以文本输出名称命名,其下输出文本值,文本...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?