找回密码
 注册
搜索
查看: 2730|回复: 27

[讨论] 如何看MTK调试信息

[复制链接]
发表于 2009-10-14 10:36:52 | 显示全部楼层 |阅读模式
那位DX能不能帮忙分析下下面的调试信息,是什么原因导致的assert,谢谢了


2478973:275963 [Trace] 16:18:15:234 2009/10/13 MOD_NIL, TRACE_ERROR "Exception type: fatal error(task)"
2478973:275963 [Trace] 16:18:15:234 2009/10/13 MOD_NIL, TRACE_ERROR "software version:
XXXGEMINI"
2478973:275963 [Trace] 16:18:15:234 2009/10/13 MOD_NIL, TRACE_ERROR "boot mode: normal mode"
2478973:275963 [Trace] 16:18:15:234 2009/10/13 MOD_NIL, TRACE_ERROR "rtc sec = 21, rtc min = 22, rtc hour = 4"
2478973:275963 [Trace] 16:18:15:234 2009/10/13 MOD_NIL, TRACE_ERROR "rtc day = 2, rtc mon = 1, rtc wday = 2, rtc year = 8"
2478973:275963 [Trace] 16:18:15:250 2009/10/13 MOD_NIL, TRACE_ERROR "execution unit: MMIMMI "
2478973:275963 [Trace] 16:18:15:250 2009/10/13 MOD_NIL, TRACE_ERROR "status: 0x00000000"
2478973:275963 [Trace] 16:18:15:250 2009/10/13 MOD_NIL, TRACE_ERROR "stack pointer: 0x080CCED4"
2478973:275963 [Trace] 16:18:15:250 2009/10/13 MOD_NIL, TRACE_ERROR "stack dump:"
2478973:275963 [Trace] 16:18:15:250 2009/10/13 MOD_NIL, TRACE_ERROR "    0x0019D8D3"
2478973:275963 [Trace] 16:18:15:250 2009/10/13 MOD_NIL, TRACE_ERROR "    0x0000006B"
2478973:275963 [Trace] 16:18:15:250 2009/10/13 MOD_NIL, TRACE_ERROR "    0x0000006B"
2478973:275963 [Trace] 16:18:15:265 2009/10/13 MOD_NIL, TRACE_ERROR "    0x000832E5"
2478973:275963 [Trace] 16:18:15:265 2009/10/13 MOD_NIL, TRACE_ERROR "    0x00000001"
2478973:275963 [Trace] 16:18:15:265 2009/10/13 MOD_NIL, TRACE_ERROR "    0x00000001"
2478973:275963 [Trace] 16:18:15:265 2009/10/13 MOD_NIL, TRACE_ERROR "    0x00075481"
2478973:275963 [Trace] 16:18:15:265 2009/10/13 MOD_NIL, TRACE_ERROR "    0x00000001"
2478973:275963 [Trace] 16:18:15:265 2009/10/13 MOD_NIL, TRACE_ERROR "    0x002C94DB"
2478973:275963 [Trace] 16:18:15:281 2009/10/13 MOD_NIL, TRACE_ERROR "    0x00494D4D"
2478973:275963 [Trace] 16:18:15:281 2009/10/13 MOD_NIL, TRACE_ERROR "number of messages in the external queue: 0"
2478973:275963 [Trace] 16:18:15:281 2009/10/13 MOD_NIL, TRACE_ERROR "messages in the external queue:"
2478973:275963 [Trace] 16:18:15:281 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:281 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:281 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:296 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:296 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:296 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:296 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:296 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:296 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:312 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:312 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:312 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:312 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:312 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:312 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:328 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:328 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:328 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:328 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:328 2009/10/13 MOD_NIL, TRACE_ERROR "    MSG_ID_INVALID_TYPE"
2478973:275963 [Trace] 16:18:15:328 2009/10/13 MOD_NIL, TRACE_ERROR "interrupt mask: 0x00000000 0x00000000"
2478973:275963 [Trace] 16:18:15:328 2009/10/13 MOD_NIL, TRACE_ERROR "processing_lisr: 0x00000000"
2478973:275963 [Trace] 16:18:15:343 2009/10/13 MOD_NIL, TRACE_ERROR "lr: 0x000B5513"
2478973:275963 [Trace] 16:18:15:343 2009/10/13 MOD_NIL, TRACE_ERROR "diagnosis: healthy"
2478973:275963 [Trace] 16:18:15:343 2009/10/13 MOD_NIL, TRACE_ERROR "owner: "
2478973:275963 [Trace] 16:18:15:343 2009/10/13 MOD_NIL, TRACE_ERROR "timing check: 0 0 0 0 0 0"
2478973:275963 [Trace] 16:18:15:343 2009/10/13 MOD_NIL, TRACE_ERROR "fatal error code 1: 0x00000B03"
2478973:275963 [Trace] 16:18:15:359 2009/10/13 MOD_NIL, TRACE_ERROR "fatal error code 2: 0x000B5513"
2478973:275963 [Trace] 16:18:15:359 2009/10/13 MOD_NIL, TRACE_ERROR "TaskName = MMIMMI "
2478973:275963 [Trace] 16:18:15:359 2009/10/13 MOD_NIL, TRACE_ERROR "TaskStackGuardPattern = STACKEND"
2478973:275963 [Trace] 16:18:15:359 2009/10/13 MOD_NIL, TRACE_ERROR "task current status = 0x00000000"
2478973:275963 [Trace] 16:18:15:359 2009/10/13 MOD_NIL, TRACE_ERROR "task external queue"
2478973:275963 [Error] 16:18:15:359 2009/10/13 "Get PS Frame failed (0x8)"
发表于 2009-10-14 10:51:55 | 显示全部楼层
有用的只有
stack pointer:0x080CCED4
看这个地址在lis文件中看看是那个函数出的问题(地址的最后一两个数字不一定相同,只要差不多就行了)
点评回复

使用道具 举报

发表于 2009-10-14 11:15:57 | 显示全部楼层
学习学习!该死我们公司的catcher不能用[em03]
点评回复

使用道具 举报

 楼主| 发表于 2009-10-14 11:21:13 | 显示全部楼层
谢谢了   在lis里面找到眼睛都花了   还么有找到相关的函数
点评回复

使用道具 举报

 楼主| 发表于 2009-10-14 11:36:29 | 显示全部楼层
0x080C0000  这一段在lis文件中根本就没有定义过
点评回复

使用道具 举报

 楼主| 发表于 2009-10-14 11:46:32 | 显示全部楼层
2478973:275963 [Trace] 16:18:15:343 2009/10/13 MOD_NIL, TRACE_ERROR "fatal error code 1: 0x00000B03"
2478973:275963 [Trace] 16:18:15:359 2009/10/13 MOD_NIL, TRACE_ERROR "fatal error code 2: 0x000B5513"

这个fatal error code 代表什么意思   那位知道吗?
点评回复

使用道具 举报

发表于 2009-10-14 12:34:24 | 显示全部楼层
以下是引用rfsmby在2009-10-14 11:36:29的发言:
0x080C0000                这一段在lis文件中根本就没有定义过                               

先找0x080c字符串,然后查找后面的数字<=ced4且最接近ced4的那行。后面有目标文件名及函数名。
点评回复

使用道具 举报

 楼主| 发表于 2009-10-14 13:49:51 | 显示全部楼层
0x080c在lis中查不到。
0x08000000-0x08096dcc 是extsram_largepool_normal段     0x08096dcc开始是EXTSRAM
点评回复

使用道具 举报

发表于 2009-10-14 13:56:11 | 显示全部楼层
能发一份scat文件看看吗?
点评回复

使用道具 举报

发表于 2009-10-14 13:57:43 | 显示全部楼层
实在不行的看看是在那个界面出现问题的,然后加入trace语句,抓trace看看
点评回复

使用道具 举报

 楼主| 发表于 2009-10-14 14:19:14 | 显示全部楼层

scat文件

【文件名】:091014@52RD_scatGEMINI.txt
【格 式】:txt
【大 小】:10K
【简 介】:
【目 录】:


*******************
; *
; * Filename:
; * ---------
; *   scatGEMINI.txt
; *
; * Project:
; * --------
; *   Maui_Software
; *
; * Description:
; * ------------
; *   defines the memory map for the validation board
点评回复

使用道具 举报

发表于 2009-10-14 14:52:56 | 显示全部楼层
以下是引用rfsmby在2009-10-14 11:46:32的发言:
2478973:275963 [Trace] 16:18:15:343 2009/10/13 MOD_NIL, TRACE_ERROR "fatal error code 1: 0x00000B03"
2478973:275963 [Trace] 16:18:15:359 2009/10/13 MOD_NIL, TRACE_ERROR "fatal error code 2: 0x000B5513"

这个fatal error code 代表什么意思                 那位知道吗?



可以在MTK的這個文檔中找到響應的信息:Exception_Handling_V0.6.pdf
0xb03, LR Software abnormal reset.
点评回复

使用道具 举报

发表于 2009-10-14 15:06:38 | 显示全部楼层
看了scat,感到奇怪0x08ccxxx的地址怎么出来的?
要不你试试10楼的方法
点评回复

使用道具 举报

发表于 2009-10-14 16:09:31 | 显示全部楼层
B03 Software abnormal reset.
不是已知类型的reset,不好直接判断原因。两种方法,一种是先找到入口点然后重现用调试工具调试:
1.        可以先尝试还原call stack,就是把stack dump里0x0019D8D3,0x000832E5等地址在sym或lis文件找对应的函数,并确认调用关系是否正常。(0x080CCED4是MMI栈顶指针,是内存地址,不是函数地址)
2.        如果call stack异常无法使用,也可以根据对code的熟悉程度,在该use case执行过程的多个函数打断点然后逐步缩小范围,找到出错的点
另外一种方法是分析memory dump,使用catcher读出来的RAM镜像,然后load进trace32然后查栈查全局变量等分析
点评回复

使用道具 举报

发表于 2009-10-14 16:22:46 | 显示全部楼层
memory dump分析主要试用于不易重现的bug,如果bug每次都出现还是直接跟好了

看现在栈里指针情况估计栈被破坏,栈顶指针不正确,或者MTK调用栈还原算法不太好,导致stack dump的地址不都是函数地址。
最可行的方法,根据重现的use case找到对应的函数,然后在函数首尾打断点缩小范围(现在应该是函数可以跑到,但是跑不到函数尾),然后最终确定问题。
点评回复

使用道具 举报

发表于 2009-10-14 16:23:42 | 显示全部楼层
以下是引用perennial在2009-10-14 14:52:56的发言:



可以在MTK的這個文檔中找到響應的信息:Exception_Handling_V0.6.pdf
0xb03, LR Software abnormal reset.


我有这个文档,可惜不能外发呀

“授人以鱼,不如授人以渔”,
推荐你一片文章吧:http://www.52rd.com/Blog/Detail_RD.Blog_blogercn_19169.html
点评回复

使用道具 举报

 楼主| 发表于 2009-10-14 16:35:36 | 显示全部楼层
加了很多trace语句,但不是每次都会assert。
assert的时候在执行下载文件的网络回调,一般是一个回调执行完退出,应该执行下一次回调的时候就assert了
点评回复

使用道具 举报

 楼主| 发表于 2009-10-14 17:02:42 | 显示全部楼层
感谢各位DX的指点,先按各位的指点学习一下
点评回复

使用道具 举报

发表于 2009-10-14 22:51:08 | 显示全部楼层
软件流程是发给MMI一堆消息然后调对应的handler么?那就看trace最后收到什么消息,打断点在该消息处理函数是否能跑到,能跑到的话再看该函数是否能跑完。然后缩小范围

调bug最基本方法就是先找到离错误发生尽量接近的代码,然后单步/多步执行,直到错误发生
点评回复

使用道具 举报

发表于 2009-10-15 09:06:29 | 显示全部楼层
采用ARM提供工具
fromelf输出elf文件信息 在xxxx.txt中查找堆栈顶部地址  0x0019D8D3 将其低位置偶数 0x0019D8D2
查找到对应的地址[也就是0x0019D8D2]所指的函数就是出错的地方
搞不清楚就所有参数都带,文件有点大忍耐一下
fromelf -a -c -s -text -text xxx.elf -output xxxx.txt


good luck ![em08]

[此贴子已经被作者于2009-10-15 10:29:19编辑过]
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-1-2 03:30 , Processed in 0.051946 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表