最近在做symbianC++开发。因为引用了一个shapelib的开源库,在退出程序时,老是会弹出”程序已关闭,程序名称 alloc:内存地址”之类的错误。如下图所示。
上网搜了一下,这个对话框往往是内存泄露引起的。
Symbian上调试内存泄露也有很多方法。其中有一个工具是大家都比较认同的,hooklogger。下载试用了一下,的确很方便。
第一步,下载HookLogger,下载地址如下:
http://developer.symbian.com/main/downloads/files/HookLogger.msi
该版本的相关介绍见如下页面:
http://developer.symbian.com/main/tools_and_sdks/developer_tools/supported/hook_logger/index.jsp
我用的sdk版本是: s60 3rd Edition 1.1,应该symbian7.0到9.0都支持吧
安装完后在安装路径下根据SDK版本, 运行 SetupHooks 即可, 具体步骤如下:
首先在命令提示符下输入:
devices
获得你的SDK对应的 devices 标识, 我电脑上显示的SDK版本是:S60_3rd_MR_2:com.nokia.s60
然后找到你的HookLogger的安装路径, 先切换到你安装hooklogger的盘符,然后用cd命令进入:
我的安装在D盘,输入”D:”回车,然后输入: cd D:"Symbian"HookLogger 回车
运行
SetupHooks S60_3rd_MR_2:com.nokia.s60
然后先启动HookLogger,切换到Threads选项卡:
再启动模拟器,可以看到Threads下面的输出区域有反应,说明成功了。
运行你要调试的程序,然后退出,程序弹出“程序已关闭的错误对话框”。然后在HookLogger里切换到Heap选项卡
点击下面第三个按钮,什么all alloc,第一个单词没显示出来。在上面找到出错的地址,双击弹出如下对话框:
在如图所示的地方,你可以看到出错的代码所在的文件和行数,然后检查你的代码,改正你的错误。