×
Namespaces

Variants
Actions

堆日志记录工具(Heaplogger)

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
dougcn 在 21 Jun 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

堆日志记录工具(Heaplogger)

Heaplogger 第一版

这个Lib是一个堆调查工具。设计用来协助跟踪内存泄漏,当你做了一个OS调用时找出它是怎么回事。

它给了你记录所有内存分配和导出堆到日志文件的能力。你也能做注解,这样就能把内存分配和你的代码联系起来。函数描述见头文件:

	/**This function will go at the start of your app. It will give a config line line like
* This is the Heap Logger Dump.
* Old heap contains 000000 bytes in 000000 cells.
* If there are any cells already allocated, the old heap should be switched back
* in with User::SwitchHeap() before these cells are freed.
*
* @param aFileName is the name of the log file created
* @return the old RHeap.
*/

IMPORT_C static RHeap* HeapLogger::UseHeapLogger(const TDesC& aFileName);
 
/**This sets what will actually be logged. Defaults to ELogNothing
* @param aMode is an ored combination of THeapLoggerMode
*/

IMPORT_C static void HeapLogger::SetMode(TInt aMode);
 
/**When content is logged (on Free or a heap dump) this is the max
* length of the buffer to be logged.
* @param aMaxLen the max length to log.*/

IMPORT_C static void HeapLogger::SetMaxContentLength(TInt aMaxLen);
 
/**This dumps the current heap into the log file.*/
IMPORT_C static void HeapLogger::DumpHeap();
 
/**This allows you to put tags in the log file so that you can tie the
* allocations to sections of code.
* @param aLogStr is a tag for your code to annotate the log.
* @param this is the file, normally given by "__FILE__"
* @param this is the lin number in the source file. Given by "__LINE__"*/

IMPORT_C static void HeapLogger::Log(const TDesC8& aLogStr, const char* aFile, TInt aLine);

用法

欲用heaplogger,只需在mmp file包含头文件和静态库文件,然后调用上述函数。可以在下面地址下载一个Hello world例子:

 http://homepage.virgin.net/mr.nigel.brown/examples/Lumberjack1.zip.

Lumberjack只是使用这个日志工具记录一些随机的东西。库文件和头文件已包括其中。库文件是针对Series 60 3rd MR编译的,但在其他Symbian OS V.9平台下也应该可以工作。

这个工具可工作在emulator上,但有更好的工具可用,因此实际上这个工具只在目标设备上有用。而且,在记录日志时它使应用程序运行得难以置信的慢,因而长期使用无益,只适于做一次性调查。日志文件也是很大的。

通过在进程中替换堆为自定义的版本一切就能工作了。我已在实际工作中用了几次,不是完全测试过。发布在这里很大程度是为取乐。

我的确碰到过一些有关使用它和carbide中目标设备调试方面的问题,但那已经过去了。 有任何意见,可张贴在这里。

Internal links

This page was last modified on 15 December 2011, at 05:39.
111 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×