AppVerifier的使用2-log文件的分析

上一篇说到怎么用avlogview.exe打开Appverify.exe的文件。下面是我的截图。

 

 

这里callstack的顺序是从下到上看的。这里有几个没有文件名和函数名的调用,不过没关系,根据函数从下到上的调用顺序,我们看最上面的那排。 打开我们上一篇中生成的程序的map文件。

在这里分别比较前面三个函数的地址。比较verifier log文件中第一个地址是1129ch.从上到下,最后一个比1129c小的是11268.那么就是函数WinMainCRTStartup函数,即启动函数。分别比较这三个,我们就知道,是winWmainCRTStartup->WinMain->testmemoryleak。不过我用的时候只用找最后一个函数起始地址。即testmemoryleak的地址是1116c.那么指令相对于函数起始地址为111ac-1116c=40. (十六进制) 它所对应的目录文件为 code.obj.

obj是一个二进制文件,我们需要借助于生成程序和汇编指令的cod文件来找到源文件发生错误的地址。生成这个文件的方式是在工程中设置,property->configuration properties->c/c++->output Files->Assembler Output,选择要生成的为Assembly, Machine Code and Source (/FAcs)。之后,只用编译文件就可以生成。

打开这个文件,找到它对应的源文件。为code.cpp。但一般不用,因为xx.cod就是由xx.cpp生成的。

 

再找到testmemoryleak函数。函数下面的指令地址是相对于函数起始地址。前面已经找到指令的地址是40,那么找到这个函数指令中地址为40的指令。可以看到它是new int[10]生成的。前面的号就是源文件的第几行。这里它是第7行。

 

              这样,我们再打开,code.cpp, 找到第7号。

 

       这样,我们就找到了内存泄漏的地方了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值