网站大量收购闲置独家精品文档,联系QQ:2885784924

如何定位WinCE产生DataAbort错误位置.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何定位WinCE产生DataAbort错误位置

如何定位WinCE产生Data Abort错误的位置 分类: WinCE 2009-07-02 13:35 887人阅读 评论(0) 收藏 举报 在调试WinCE程序的时候,有时候会碰到Data Abort的异常,系统会在调试控制台输出如下类似信息: Exception Data Abort (4): Thread-Id=03d3000e(pth=83a9e024), Proc-Idpprc=81d48308) NK.EXE, VM-active=00fa000a(pprc=83a20ecc) explorer.exe PC=c0883660(s3c2440disp.dll+0 RA=a014f780(???+0xa014f780) SP=d2e8fc58, BVA? 对于按Release编译的程序,需要一些额外的工作才能找到产生错误的地方,下面描述了如何根据错误提示信息定位错误代码的过程: ? 让编译器产生map和cod文件 设置WINCEMAP和WINCECOD两个环境变量,然后重新编译整个项目,我是在BAT文件中加入这两行代码: set WINCEMAP=1 set WINCECOD=1 ? 计算错误产生的地址 错误产生在s3c2440disp.dll内部,打开文本文件 s3c2440disp.map(与s3c2440disp.dll在同一目录),在文件头中,Preferred load address is出Rav地址为0将其与错误产生的偏移地址0加,得到Rva+Base地址为00+ 0 ? 找出错误来自哪个文件哪个函数 在s3c2440disp.map文件中,根据Rva+Base地址,得知错误产生于s3c2440disp.obj中的S3C2440DISP::CursorOff成员函数内部 0001????? ?CursorOn@S3C2440DISP@@QAAXXZf?? s3c2440disp.obj 0001????? ?CursorOff@S3C2440DISP@@QAAXXZf?? s3c2440disp.obj 0001:000026f4?????? ?SetPointerShape@S3C2440DISP@@UAAJPAVGPESurf@@0HHHH@Z 100036f4 f?? s3c2440disp.obj ? 计算错误在函数中的偏移地址 CursorOff函数起始地址为0错误指令在代码中的偏移为0xE8 (0- 0 ? 找到错误出自哪行代码 打开文件s3c2440disp.cod文件(与s3c2440disp.obj在同一目录),定位到CursorOff函数偏移0xE8处(0- 0 错误地址-函数开始地址),即可找到了错误发生的汇编代码和对应的C源代码 ; 624? : ????{ ; 625? : ?????break; ; 626? : ????} ; 627? : ; 628? : ????ptrLine[x * (m_colorDepth 3)] = cbsLine[(x - m_CursorRect.left) * (m_colorDepth 3)]; ? 000d0?e59430c0? ldr???????? r3, [r4, #0xC0] ? 000d4?e59420e4? ldr???????? r2, [r4, #0xE4] ? 000d8?e1a001a3? mov???????? r0, r3, lsr #3 ? 000dc?e0463002? sub???????? r3, r6, r2 ? 000e0?e0227093? mla???????? r2, r3, r0, r7 ? 000e4?e021e690? mla???????? r1, r0, r6, lr ? 000e8?e5d23000? ldrb??????? r3, [r2] ? 000ec?e5c13000? strb??????? r3, [r1] ? (错误行的汇编代码表明CPU在读入cbsLine指针指向的数据时发生了异常,经过调试,最终得知错误产生是因为某些情况下cbsLine指针无效而导致Data Abort异常) Exception Data Abort (4): Thread-Id=070a0002(pth=827fe378),

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档