How to use hooklogger
2010-05-27 21:13
435 查看
How to use hooklogger
HookLogger是由Symbian提供的一款很好的emulator工具,有助于迅速找到泄漏的地方。它只能运行在emulator上。
一、HookLogger如何工作?
这个工具是通过替换EUSER.DLL文件为自己的版本,来记录内存分配情况、进程和线程的创建、Leaves等等。HookLogger应用程序收集这些日志信息,然后以一种易读的格式呈现给用户。
二、如何安装?
同任何windows软件的安装!
三、如何配置?
安装完需要做下配置,就是让模拟器和hooklogger软件关联上:
1. 打开Windows的命令控制台(开始菜单中单击运行,输入cmd然后就按下回车),输入下面的命令:
//列出当前安装的模拟器
C:/-> Devices
//关联模拟器,
C:/->SetupHooks S60_3rd_MR:com.nokia.s60
如下图所示:
四、如何使用?
1. 首先运行HookLogger,在Filter选项页上选择Include Only Checked,然后在右侧的应用程序列表中挑上要调试的应用程序,这样Threads页上出现的内容就少些,方便查找。
2. 以debug模式启动要调试的程序,这是Hooklogger会多次弹出一些确认对话框,只需按确定就行,然后运行一遍程序,退出时会提示内存泄露,记下这个内存地址
3.在Threads 页上找到调试的程序,点击右键,选择Allocations from process,如下图所示:
4然后出现下面的画面,列出了该应用程序分配的所有的内存,然后找到泄露的地址
5 在泄露的地址项上双击,出现详细的信息,包括泄露出现的源码文件及代码行数,如下图:
五、后记:
使用HookLogger常出现的问题:
1. 好像hooklogger和模拟器总是关联不上,就是Threads页里面什么也没有?
答:请确认,先运行hooklogger,然后启动调试程序
2. 我按照第一步做了,还是不行,就是一顿确定后就没反应了?
答:按下F8(resume)试试,就是那个红三角
3. 在Threads页中出现了好多的thread,移动下scrollbar,非常慢?
答:请确认是否设置了filter,就是在 四、如何使用的第一条说的
4. 找到了泄露分配的指针,可是看不到源码,全是dll?
答:我没有遇见过这种情况,不过,网上说,这可能是某些库里分配了内存,但是需要你来释放,就是内存的所有权转移你了,而没有释放。
5. 提示泄露在我的代码里面,可是我确实没有new对象呀?
答:原则上,不new一般是不需要delete的,可是也有特殊的情况,也许是库设计的不太好吧,看下面的代码片段(我折腾了好一阵子):
如果注释掉Line4,就提示在Line1处有泄露!
//code segment
Line 1: CCommsDatabase* commDb = CommsDatabase::NewL(EDatabaseTypeIAP);
Line 2: CleanupStack::PushL(commDb);
Line 3: commDb->BeginTransaction();
……
Line 4:commDb->CommitTransaction();
Line 5:CleanupStack::PopAndDestroy(commDb);
HookLogger是由Symbian提供的一款很好的emulator工具,有助于迅速找到泄漏的地方。它只能运行在emulator上。
一、HookLogger如何工作?
这个工具是通过替换EUSER.DLL文件为自己的版本,来记录内存分配情况、进程和线程的创建、Leaves等等。HookLogger应用程序收集这些日志信息,然后以一种易读的格式呈现给用户。
二、如何安装?
同任何windows软件的安装!
三、如何配置?
安装完需要做下配置,就是让模拟器和hooklogger软件关联上:
1. 打开Windows的命令控制台(开始菜单中单击运行,输入cmd然后就按下回车),输入下面的命令:
//列出当前安装的模拟器
C:/-> Devices
//关联模拟器,
C:/->SetupHooks S60_3rd_MR:com.nokia.s60
如下图所示:
四、如何使用?
1. 首先运行HookLogger,在Filter选项页上选择Include Only Checked,然后在右侧的应用程序列表中挑上要调试的应用程序,这样Threads页上出现的内容就少些,方便查找。
2. 以debug模式启动要调试的程序,这是Hooklogger会多次弹出一些确认对话框,只需按确定就行,然后运行一遍程序,退出时会提示内存泄露,记下这个内存地址
3.在Threads 页上找到调试的程序,点击右键,选择Allocations from process,如下图所示:
4然后出现下面的画面,列出了该应用程序分配的所有的内存,然后找到泄露的地址
5 在泄露的地址项上双击,出现详细的信息,包括泄露出现的源码文件及代码行数,如下图:
五、后记:
使用HookLogger常出现的问题:
1. 好像hooklogger和模拟器总是关联不上,就是Threads页里面什么也没有?
答:请确认,先运行hooklogger,然后启动调试程序
2. 我按照第一步做了,还是不行,就是一顿确定后就没反应了?
答:按下F8(resume)试试,就是那个红三角
3. 在Threads页中出现了好多的thread,移动下scrollbar,非常慢?
答:请确认是否设置了filter,就是在 四、如何使用的第一条说的
4. 找到了泄露分配的指针,可是看不到源码,全是dll?
答:我没有遇见过这种情况,不过,网上说,这可能是某些库里分配了内存,但是需要你来释放,就是内存的所有权转移你了,而没有释放。
5. 提示泄露在我的代码里面,可是我确实没有new对象呀?
答:原则上,不new一般是不需要delete的,可是也有特殊的情况,也许是库设计的不太好吧,看下面的代码片段(我折腾了好一阵子):
如果注释掉Line4,就提示在Line1处有泄露!
//code segment
Line 1: CCommsDatabase* commDb = CommsDatabase::NewL(EDatabaseTypeIAP);
Line 2: CleanupStack::PushL(commDb);
Line 3: commDb->BeginTransaction();
……
Line 4:commDb->CommitTransaction();
Line 5:CleanupStack::PopAndDestroy(commDb);
相关文章推荐
- experiment : how to use CONTAINING_RECORD
- How-to: Use the ShareLib in Apache Oozie (CDH 5)
- How to Use Session State Provider (Microsoft Project code named Velocity)
- How to use epoll? A complete example in C
- How to use the HTML source for debugging issues
- 如何使用spy ++ (How to use Spy ++)
- How to use Genymotion (High performance Android Emulator)
- [win32] How to use WIN32 Event Kernel Object
- How To Use gflags (formerly Google Commandline Flags)
- 如何使用代码美化器Uncrustify (How to use code beautifier Uncrustify)
- How to use bitBucket with EGit in Eclipse,如何在Eclipse中使用bitbucket远程仓库
- How to use toolbar control on dialog using CToolBar class in VC++ - VC++ 中用CToolBar 类如何使用ToolBar控件
- How to Use Disk Utility to Erase a Macintosh Hard Drive
- How to use C# code to get the windows components
- how to use openvas
- How to use eclipse quickly
- How to use segment advisor
- (转)How to use HttpSendRequestEx with password-protected URLs
- How To Use FETCH_RECORDS In Oracle Forms
- How to use TFS API