欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

wince下‘prefetch abort’、'raised exception'怎么定位

更新时间: 2014-01-05 03:10:29 责任编辑: Author_N1

 

WINCE下‘Prefetch Abort’、'Raised Exception'如何定位
在WINCE执行程序,报错如下
Exception 'Prefetch Abort' (3): Thread-Id=06b90002(pth=8f6e5d50), Proc-Id=043500c6(pprc=8741c000) 'SeriesSample.exe', VM-active=043500c6(pprc=8741c000) 'SeriesSample.exe'
PC=19930520(???+0x19930520) RA=000124c4(SeriesSample.exe+0x000024c4) SP=0047ec84, BVA=19930520
Exception 'Raised Exception' (-1): Thread-Id=06b90002(pth=8f6e5d50), Proc-Id=00400002(pprc=86809308) 'NK.EXE', VM-active=043500c6(pprc=8741c000) 'SeriesSample.exe'
PC=c003bc70(k.coredll.dll+0x0001bc70) RA=801674c8(kernel.dll+0x000064c8) SP=d490f3b8, BVA=ffffffff
不知如何定位
--参考方法--
使用 MAP 文件
--参考方法--
不过就 LZ 提供的错误信息,PC 指针指向内核,应该是指针越界了吧
--参考方法--
这种方法,网上是可以 google 到的。

DATA abort定位方法
该方法只能定位显性泄漏,定位到的C语句一定产生泄漏了,但可能这个位置是“理论上”不会出问题的代码.那么这是由于同进程内其他代码泄漏而影响了进程的堆区或栈区(隐性泄漏,这个地方不会产生data abort exception),然后被定位出来的代码才被动地显性泄露,产生data abort。
首先在DEBUG版本中定位DATA ABORT的方法,地球人应该都知道了吧,我就不废话了。Platform Builder或VS2005、EVC这类IDE工具会在DEBUG模式下自动停在出错的那句,情况就很显然了。
RELEASE版本下的泄漏就要稍微麻烦一点,如何快速定位呢?
案例一:用EVC编译的应用程序泄漏
首先我做了一个内存泄漏的程序MemoryLeakTest.exe,里面做了一个泄漏的函数:
void MemoryLeak(){
int *p = (int *)0x81000000;*p = 10;
}
编译的时候注意先在project settings里的Link页里勾选“Generate mapfile”,会生成一个map文件。如下图:
把编译出来的RELEASE版本可执行文件放到CE5平台下运行。出错的时候串口打印了一句
Data Abort: Thread=83ad1d38 Proc=820266d0 'MemoryLeakTest.exe'AKY=00000021 PC=00011008(MemoryLeakTest.exe+0x00001008) RA=00011030(MemoryLeakTest.exe+0x00001030) BVA=81000000 FSR=0000000d
这句是系统自动输出的。我们得到了一个关键的信息:PC指针。和PC指针在MemoryLeakTest.exe中的偏移量。然后打开编译时生成的MemoryLeakTest.map文件,文件内容如下:
MemoryLeakTest
Timestamp is 46fcbb17 (Fri Sep 28 16:28:07 2007)
Preferred load address is 00010000
Start         Length     Name                   Class0001:00000000 00000258H .text                   CODE0002:00000000 00000014H .xdata                  DATA0002:00000014 00000014H .idata$2                DATA0002:00000028 00000014H .idata$3                DATA0002:0000003c 00000010H .idata$4                DATA0002:0000004c 0000000cH .idata$6                DATA0002:00000058 00000000H .edata                  DATA0003:00000000 00000010H .idata$5                DATA0003:00000010 00000004H .CRT$XCA                DATA0003:00000014 00000004H .CRT$XCZ                DATA0003:00000018 00000004H .CRT$XIA                DATA0003:0000001c 00000004H .CRT$XIZ                DATA0003:00000020 00000004H .CRT$XPA                DATA0003:00000024 00000004H .CRT$XPZ                DATA0003:00000028 00000004H .CRT$XTA                DATA0003:0000002c 00000004H .CRT$XTZ                DATA0003:00000030 00000009H .bss                    DATA0004:00000000 00000038H .pdata                  DATA0005:00000000 00000010H .rsrc$01                DATA0005:00000010 00000000H .rsrc$02                DATA
  Address         Publics by Value              Rva+Base     Lib:Object
 0001:00000000       ?MemoryLeak@@YAXXZ        00011000 f   MemoryLeakTest.obj0001:00000010       WinMain                    00011010 f   MemoryLeakTest.obj0001:0000002c       WinMainCRTStartup          0001102c f   corelibc:pegwmain.obj0001:000000a0       _cinit                     000110a0 f   corelibc:crt0dat.obj0001:00000210       exit                       00011210 f   corelibc:crt0dat.obj0001:00000228       _XcptFilter                00011228 f   coredll:COREDLL.dll0001:00000238       __C_specific_handler       00011238 f   coredll:COREDLL.dll0001:00000248       LocalFree                  00011248 f   coredll:COREDLL.dll0002:00000014       __IMPORT_DESCRIPTOR_COREDLL 00012014     coredll:COREDLL.dll0002:00000028       __NULL_IMPORT_DESCRIPTOR   00012028     coredll:COREDLL.dll0003:00000000       __imp___C_specific_handler 00013000     coredll:COREDLL.dll0003:00000004       __imp_LocalFree            00013004     coredll:COREDLL.dll0003:00000008       __imp__XcptFilter          00013008     coredll:COREDLL.dll0003:0000000c       \177COREDLL_NULL_THUNK_DATA 0001300c     coredll:COREDLL.dll0003:00000010       __xc_a                     00013010     corelibc:crt0init.obj0003:00000014       __xc_z                     00013014     corelibc:crt0init.obj0003:00000018       __xi_a                     00013018     corelibc:crt0init.obj0003:0000001c       __xi_z                     0001301c     corelibc:crt0init.obj0003:00000020       __xp_a                     00013020     corelibc:crt0init.obj0003:00000024       __xp_z                     00013024     corelibc:crt0init.obj0003:00000028       __xt_a                     00013028     corelibc:crt0init.obj0003:0000002c       __xt_z                     0001302c     corelibc:crt0init.obj0003:00000030       __onexitend                00013030     <common>0003:00000034       __onexitbegin              00013034     <common>0003:00000038       _exitflag                  00013038     <common>
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:10:29
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19150/
本文WWW.DOC100.NET DOC100.NET版权所有。