阅读:2572回复:7
如何定位应用程序造成的data abort
程序在跑的时候,串口会打印Data Abort,但是不会挂掉,等到运行一段时间后,程序就挂了。打印出来的信息如下:
Data Abort: Thread=0x8d78283c Proc=80f26e60 (A.exe) AKY=00000101 PC=03fcd150 RA=000198d8 BVA=12000000 FSR=00000007 以前看到过别人结合map文件去定位data abort错误,可是我这里打印出来的信息并没有指出A.exe的偏移量,所以不知道该怎么确定偏移量。我试着用PC的低四位d150去定位,可是所指向的map文件中的函数感觉是不会有错误的,头痛啊。不知道上面的这几行信息能否定位出错误的位置呢? 另外请教下高手,wince下的exe文件的格式与台式机上的是否一致,都是PE?如果是的话,似乎代码段的偏移还要扣掉0x1000才对。 |
|
沙发#
发布于:2008-11-05 20:22
用RA=000198d8 -0x1000 定位
|
|
板凳#
发布于:2008-11-07 11:00
wenzai 兄能否详细说明一下 感谢
|
|
|
地板#
发布于:2008-11-12 10:39
多谢wenzai兄指点,我去试试看这个灵不灵。前一阵子我就只能用二分法来定位问题,一个模块一个模块的找,快累死了,笨人用笨办法啊,呵呵。
|
|
地下室#
发布于:2008-11-12 14:25
我在程序中故意造了一个错误,调用memcpy时指定了拷贝0xffffffff个字节,出现了data abort,这次串口打印出来的数据是:Thread=8f88_e49c Proc=8d727010 "A.exe"
AKY=00000401 PC=03fbfca0 RA=35000000 BVA=1607fbb7 FSR=00000003 map文件里面,对应出错函数的地址为 0001:0000e7c8 0001f7c8 这样用RA来定位似乎又不准了啊。wenzai兄,这种情况该如何计算函数地址呢? |
|
5楼#
发布于:2008-11-12 15:59
刚才在网上搜了下,wince下要用 PC=03fcd150 来定位。别人的串口打印出来的都是
PC=03fcd150 (nk.exe+ 0x????????),我的并没有这个偏移量。 现在问题变成 nk.exe的地址是多少呢? 这个跟load address和jumpaddress应该都不一样。 |
|
6楼#
发布于:2008-11-22 12:50
你試試CrashFinder這個工具,很好用.....對著map去找太累了.
|
|
7楼#
发布于:2008-12-04 11:04
感谢。一段没时间了,还以为没人回这个贴了呢,呵呵。多谢。
|
|