|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
跟踪DATAABORT |
作者:smartsheep 栏目:ARM技术 |
本人写程序不够严谨,常引起内存越界导致进入到DATAABORT, 而这是很难查找原因的,请问你们是否知道怎样跟踪DATAABORT? 也就是说怎样知道程序是在哪里进入到DATAABORT的?如果能知道的话查错将方便很多。 欢迎大家讨论。 |
2楼: | >>参与讨论 |
作者: caj73 于 2006/11/24 21:22:00 发布:
我说说 keil是这么说的: 进入DATAABORT后看 R14, R14的值 - 8就是数据异常发生的地方, 在反汇编窗口中跳到 R14-8的位置,查看该位置所在的源代码. 即使这样,也还是很难分析的, 可以分析到DATAABORT发生的位置, 但什么原因导致的则要好好分析一下程序了! |
3楼: | >>参与讨论 |
作者: computer00 于 2006/11/24 23:48:00 发布:
我的做法是,将R14复制到PC中,然后再切换到C代码窗口 这样我就知道在访问哪个变量的时候出错.一般是指针或者数组越界了。 本来应该要减8的,但是通常情况下都会在附近,就不减8了,如果发现不对,再减8. |
4楼: | >>参与讨论 |
作者: wlsui 于 2006/11/25 23:04:00 发布:
原因 一般是指针或者数组越界,还有就是子函数没有正常返回,如本来函数定义的是有返回型的,但程序中却没有正确的return,这也将导致DATAABORT |
5楼: | >>参与讨论 |
作者: smartsheep 于 2006/11/27 14:58:00 发布:
是的,我也看到R14-8了 这种方法还是很正确的,如果是简单的数组溢出等越界比较好查找,但是正如caj73所说, 比如出错是在A语句,但原因可能在遥远的Z语句中野指针把A语句用到的内容给改了。 |
6楼: | >>参与讨论 |
作者: computer00 于 2006/11/27 15:29:00 发布:
但找到A语句了,就知道它用了那些东西, 然后再想想,这个东西可能在哪里被改了~~~~~~~~~大部分情况下都可以找到的。 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |