2.3分析日志文件
日志文件memwatch.log中包含的信息主要有以下几点:
*
测试日期
*
状态搜集器的信息
*
使用MemWatch的输出函数或宏(如TRACE等)的信息。
*
MemWatch捕获的错误信息
*
内存使用的全局信息统计,包括四点:
1)分配了多少次内存
2)最大内存使用量
3)分配的内存总量
4)为释放的内存总数
MemWatch捕获的错误记录在日志文件中的输出格式如下:
message: filename(linenumber), information
2.4 注意事项
mwInit()和mwTerm()是对应的.所以使用了多少次mwInit(),就需要调用多少次
mwTerm()用于终止MemWatch.
如果在流程中捕获了程序的异常中断,那么需要调用mwAbort()而不是
mwTerm()。即使有显示的调用mwTerm(),mwAbort()也将终止MemWatch。
MemWatch不能确保是线程安全的。如果你碰巧使用Wind32或者你使用了线程,作为2.66,是初步支持线程的。定义WIN32或者MW_PTHREADS以明确支持线程。这会导致一个全局互斥变量产生,同时当访问全局内存链时,MemWatch会锁定互斥变量,但这远不能证明是线程安全的。
3 结论
从MemWatch的使用可以得知,无法用于内核模块。因为MemWatch自身就使用了应用层的接口,而不是内核接口。但是,对于普通的应用层程序,我认为还是比较有用,并且是开源的,可以自己修改代码实现;它能方便地查找内存泄漏,特别是提供的接口函数简单易懂,学习掌握很容易,对应用层程序的单元测试会较适用。
本文出自 “BrantC的博客” 博客,转载请与作者联系!