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號。

 

       這樣,我們就找到了內存泄漏的地方了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章