AppVerifier的使用2-log文件的分析
上一篇说到怎么用avlogview.exe打开Appverify.exe的文件。下面是我的截图。
文章图片
【AppVerifier的使用2-log文件的分析】这里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号。
文章图片
这样,我们就找到了内存泄漏的地方了。
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量