内存泄漏检测工具
文/Peter Jiang(译自newlc.com)
检测已分配资源
第一个工具是一个内存资源使用的监听器.它只能在模拟器上进行调试.可以使用快捷键来调用
按键 功能
CTRL+ALT+SHIFT+A 显示已分配堆单元的数量
CTRL+ALT+SHIFT+B 显示已分配的文件服务器资源的数量
CTRL+ALT+SHIFT+C 显示已分配的窗口服务器资源的数量
堆检测宏
第二个工具可以在你指定的代码块中检测内存的分配情况.只需要把这些宏加入你要检测的代码部分即可:
宏 功能
__UHEAP_MARK 开始检测堆的使用状况
__UHEAP_CHECK(n) 检测自上一个__UHEAP_MARK是否有’n’个堆被分配(尚未释放)
__UHEAP_CHECKALL(n) 检测是否有’n’个堆已分配
__UHEAP_MARKEND 检测结束,并检测在__UHEAP_MARK之后有没有未被释放的堆
__UHEAP_MARKENDC(n) 检测结束,并检测在__UHEAP_MARK之后有无’n’个未被释放的堆
这是一个简单的使用示例
CMyClass * a1 = new(ELeave)CMyClass;
...
__UHEAP_MARK; //开始检测
CMyClass * a2 = new(ELeave)CMyClass;
CMyClass * a3 = new(ELeave)CMyClass;
...
__UHEAP_CHECK(2); //检测在__UHEAP_MARK之后有2个堆单元被分测(a2,a3)
__UHEAP_CHECKALL(3); //检测三个堆已被分配(a1,a2,a3)
delete(a2);
__UHEAP_MARKEND; // 结束检测,a3内存泄露
如果想设计驱动程序或内核模块,你可以使用__KHEAP_xxx宏来检测内核堆.
分配失效工具
用来进行压力测试.你可以使用下列宏
宏 功能
__UHEAP_SETFAIL(aType, n) 可以根据参数的不同来指定下一个内存如何分配.
参数表如下:
EDeterministic:n个请求失败
ERandom:随机失败,n是随机数的种子
ETrueRandom:随机失败
__UHEAP_FAILNEXT(n) 引起下一分配失败
__UHEAP_RESET() 避免内存失败
也可以在模拟器中按CTRL+ALT+SHIFT+P和CTRL+ALT+SHIFT+Q来使用分配失败工具
文/Peter Jiang(译自newlc.com)
检测已分配资源
第一个工具是一个内存资源使用的监听器.它只能在模拟器上进行调试.可以使用快捷键来调用
按键 功能
CTRL+ALT+SHIFT+A 显示已分配堆单元的数量
CTRL+ALT+SHIFT+B 显示已分配的文件服务器资源的数量
CTRL+ALT+SHIFT+C 显示已分配的窗口服务器资源的数量
堆检测宏
第二个工具可以在你指定的代码块中检测内存的分配情况.只需要把这些宏加入你要检测的代码部分即可:
宏 功能
__UHEAP_MARK 开始检测堆的使用状况
__UHEAP_CHECK(n) 检测自上一个__UHEAP_MARK是否有’n’个堆被分配(尚未释放)
__UHEAP_CHECKALL(n) 检测是否有’n’个堆已分配
__UHEAP_MARKEND 检测结束,并检测在__UHEAP_MARK之后有没有未被释放的堆
__UHEAP_MARKENDC(n) 检测结束,并检测在__UHEAP_MARK之后有无’n’个未被释放的堆
这是一个简单的使用示例
CMyClass * a1 = new(ELeave)CMyClass;
...
__UHEAP_MARK; //开始检测
CMyClass * a2 = new(ELeave)CMyClass;
CMyClass * a3 = new(ELeave)CMyClass;
...
__UHEAP_CHECK(2); //检测在__UHEAP_MARK之后有2个堆单元被分测(a2,a3)
__UHEAP_CHECKALL(3); //检测三个堆已被分配(a1,a2,a3)
delete(a2);
__UHEAP_MARKEND; // 结束检测,a3内存泄露
如果想设计驱动程序或内核模块,你可以使用__KHEAP_xxx宏来检测内核堆.
分配失效工具
用来进行压力测试.你可以使用下列宏
宏 功能
__UHEAP_SETFAIL(aType, n) 可以根据参数的不同来指定下一个内存如何分配.
参数表如下:
EDeterministic:n个请求失败
ERandom:随机失败,n是随机数的种子
ETrueRandom:随机失败
__UHEAP_FAILNEXT(n) 引起下一分配失败
__UHEAP_RESET() 避免内存失败
也可以在模拟器中按CTRL+ALT+SHIFT+P和CTRL+ALT+SHIFT+Q来使用分配失败工具