[发明专利]一种组件对象模型对象的监控方法和装置有效
申请号: | 201210061013.0 | 申请日: | 2012-03-09 |
公开(公告)号: | CN103309796A | 公开(公告)日: | 2013-09-18 |
发明(设计)人: | 常青 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/46 |
代理公司: | 北京德琦知识产权代理有限公司 11018 | 代理人: | 谢安昆;宋志强 |
地址: | 518044 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 组件 对象 模型 监控 方法 装置 | ||
技术领域
本发明实施方式涉及计算机技术领域,更具体地,涉及一种组件对象模型(Component Object Model,COM)对象的监控方法和装置。
背景技术
COM技术是微软于1993年提出的一种用于软件开发的二进制组件技术,意在解决编程语言的互通问题。在COM构架下,人们可以开发出各种各样功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便地将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块;等等。
COM对象是遵循COM规范的COM类所创建出的对象,如果以C++实现的COM对象为例,其与普通对象的区别在于虚表结构等遵循微软的COM规范。
目前有很多针对应用程序的资源监控工具,可以跟踪应用程序从某个时间点开始后的资源占用情况,目前主要监控两类资源:内存和图形设备接口(GDI)。对内存的操作不当,比如申请后却没有释放,就会造成内存泄漏,使应用程序所占用的内存越来越大,直至崩溃。而对于GDI对象,如果申请后却没有释放,也会导致GDI泄漏,使应用程序的GDI资源被耗尽。
然而,资源“泄漏”并不仅限于内存和GDI对象,基于COM组件技术的应用程序也会面临“泄漏”的问题。COM对象本身会占用内存等计算资源,而COM对象采用“引用计数”来控制其自身的生命期。“引用计数”是一个大于或等于0的数字,它记录持有该COM对象引用的使用者的数量,只有当引用计数为0时,COM对象才认为自己已经没有存在的价值,会销毁自己。所以,如果存在使用者没有释放COM对象的引用,那么该对象将无法销毁并持续把持占用系统资源,从而导致资源泄露。
可见,在基于COM的系统中,虽然COM对象创建有统一的几个入口点,但是释放COM对象却没有统一的“释放点”,每个COM对象都是自己管理自己的死亡,自己释放自己。对系统中的所有COM对象的跟踪需要能够跟踪所有的创建和释放点,因此现有技术中无法对COM对象的资源利用进行有效监控,从而显著影响了系统资源优化。
发明内容
本发明实施方式提出一种COM对象的监控方法,以对COM对象的资源利用进行监控。
本发明实施方式还提出了一种COM对象的监控装置,以对COM对象的资源利用进行监控。
本发明实施方式的具体方案如下:
一种组件对象模型COM对象的监控方法,该方法包括:
为待监控COM对象的虚函数创建拦截函数;
通过所述拦截函数调用所述虚函数,并将在该调用过程中的所述待监控COM对象的引用计数操作记录及所述引用计数操作对应的调用栈信息保存到所述COM对象跟踪表中。
一种COM对象的监控装置,该装置包括拦截函数创建模块和监控模块,其中:
拦截函数创建模块,用于为待监控COM对象的虚函数创建拦截函数;
监控模块,用于通过所述拦截函数调用所述虚函数,并将在该调用过程中的所述待监控COM对象的引用计数操作记录及所述引用计数操作对应的调用栈信息保存到所述COM对象跟踪表中。
从上述技术方案可以看出,在本发明实施方式中,为待监控COM对象的虚函数创建拦截函数,而且通过所述拦截函数调用所述虚函数,并将在该调用过程中的所述待监控COM对象的引用计数操作记录及所述引用计数操作对应的调用栈信息保存到所述COM对象跟踪表中。由此可见,通过跟踪每个COM对象的“引用计数”变化情况,将应用程序中影响COM对象生命期的逻辑点在代码级别记录下来,可以定位运行过程中产生的无法销毁的COM对象,并追查原因,进而解决COM对象引用计数失衡引发的一系列系统问题,因此实现了对COM对象的有效跟踪,并可以优化系统资源。
附图说明
图1为根据本发明实施方式的COM对象的监控方法流程图;
图2为根据本发明实施方式的基于COM对象跟踪表的监控原理示意图;
图3为根据本发明实施方式的虚函数拦截示意图;
图4为根据本发明实施方式为生成Hook_AddRef(...)和Hook_Release(...)而创建的可执行代码段示意图;
图5为根据本发明实施方式的COM对象的监控装置结构图。
具体实施方式
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210061013.0/2.html,转载请声明来源钻瓜专利网。