asdjy123的专栏

MFC C++学习中觉得好的文章或资料

结合drwtsn32.log和.Map文件的查看、定位程序错误位置

写下大致步骤方便以后查找

参考内容在两个链接的后半部分

http://blog.csdn.net/nokianasty/article/details/8504432

http://blog.chinaunix.net/uid-7186957-id-2677948.html

主要步骤:

1、在drwtsn32.log找到错误位置:错误 ->00458861 ff9098000000     call dword ptr [eax+0x98] ds:0023:bf0500f8=????????,记住其中的addr =00458861。

2、在对应的.map文件中的Address         Publics by Value       Rva+Base                                                  Lib:Object   的Rva+Base列找到刚刚大于00458861一点的行。如下:

        0001:000577d7       ?AfxCallWndProc@@YGJPAVCWnd@@PAUHWND__@@IIJ@Z 004587d7 f   nafxcw:wincore.obj
        0001:000578d4       ?GetCurrentMessage@CWnd@@KGPBUtagMSG@@XZ 004588d4 f   nafxcw:wincore.obj

其中第二是我们所要找的行,第一行是需要用到定位的。

3、在第一行中找到nafxcw:wincore.obj位置(一般是xx.obj,这里没找到,只找到相关的nafxcw.lib)如下

Line numbers for D:\应用软件-安装\VC98\MFC\LIB\nafxcw.lib(wincore.cpp) segment .text

    35 0001:0005746e    38 0001:00057489    39 0001:000574c7    40 0001:00057505
    41 0001:00057543    53 0001:00057577    54 0001:0005757f    55 0001:00057595
    58 0001:000575b5    59 0001:000575be    60 0001:000575d1    61 0001:000575da

                                   。。。。。。。。。。。。。。。。。。。。。。

   205 0001:00057835   210 0001:0005783c   211 0001:00057840   212 0001:00057848
   215 0001:00057856   218 0001:00057867 
  219 0001:00057872   221 0001:0005787f
   223 0001:00057881   224 0001:00057886   226 0001:0005788a   230 0001:0005789e
   233 0001:000578a0   235 0001:000578a4   237 0001:000578ac   239 0001:000578b5
   240 0001:000578b7   241 0001:000578c3   244 0001:000578d4   247 0001:000578e6

4、要得到行数的地址:0x00458861-0x00400000(程序装载地址)-0x00001000(PE头文件的大小)=0x00057861

5、发现0x00057861在第3行中相应范围行为  211 0001:00057840   212 0001:00057848
                                                                                215 0001:00057856   218 0001:00057867 

说明问题就在wincore.cpp的212行到215行之间

阅读更多
个人分类: 内存泄露
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭