展讯调试工具使用心得

时间:2024.4.27

展迅调试工具使用心得

辛 琦

一、        简介

ChannelServer 和 Logel是展讯公司提供的手机实时诊断和测试工具。

ChannelServer提供手机和其他工具之间的数据中转服务。ChannelServer和手机用串口的方式连接,和其他作为客户端的各种工具之间则用socket的方式连接。

Logel则是ChannelServer的一个客户端,提供获取和按格式输出手机发送的调试信息的服务。

二、        ChannelServer

ChannelServer位于\SC6600D_BASE\Release\Tool_Cust\ChannelServer的bin目录下,而另一个Doc目录下则存放了ChannelServer的用户手册。

Bin目录下有如下的一些文件:

ChannelServer系统文件是ChannelServer 运行时需要的文件。

转发的数据日志文件记录了工具和手机之间通讯的数据包:

Tool_To_CS.log: 所有从工具发到ChannelServer的消息

CS_To_MS.log:   所有从ChannelServer发到MS的消息

MS_To_CS.log:   所有从MS发到ChannelServer的消息

CS_To_Tool.log: 所有从ChannelServer发到工具的消息

运行ChannelServer后,ChannelServer的图标会出现在Windows的托盘区:

右键点击该图标后出现菜单:

            Configure:进入ChannelServer配置界面

            Connect MSSim:连接到MS

            Disconnect MSSim: 断开和MS的连接

            MS Asserted: 设置ChannelServer为Assert状态。当MS已处于Assert状态时,而ChannelServer为了可以查看MS的内部状态信息,必须设置为Assert状态。ChannelServer处于Assert状态时,图标会变红。

            LogData:选中则开始记录ChannelServer中转的数据日志。

            Show&LogData:显示和记录ChannelServer中转的数据日志。弹出窗口的Clear按钮可以清除显示的数据。

            About:ChannelServer的版本和作者信息

            Exit:退出ChannelServer

三、        Logel

Logel位于\SC6600D_BASE\Release\Tool_Cust\Logel的bin目录下,而另一个Doc目录下则存放了Logel的用户手册。

Bin目录下存放的文件如下:

History目录下通常会有的一些文件:

以下是对定位问题有帮助的文件:

.ass:AssertFrame窗口中的操作的日志文件

.lst:Logel收到的消息的日志文件

.mem:手机内存Dump文件

运行Logel后,会出现Logel的主窗口:

关于Logel使用的介绍,请参见Reference库上的文档:

$/20050810-展讯软件文档/调试工具/Logel用户手册.doc:

四、        问题定位实例

当手机上出现Assert状态时,为了定位问题的方便,应当使用ChannelServer和Logel连接到手机,并获取相关的信息。

下面以一个实际的例子来介绍定位RS910手机上Assert问题的方法:

1、 在ccapp.c文件中的CC_HandleEnterNumWinMsg函数中插入一段Assert代码

SCI_TRACE_LOW( "win_id = %d, msg_id = %d, param = %x", win_id, msg_id, param );

SCI_PASSERT( 0, ("Test Assert") );

2、 打开手机,进入拨号界面,手机出现Assert状态。

3、 启动ChannelServer,连接到手机。

4、 选择ChannelServer右键菜单的MS Asserted,设置ChannelServer为Asserted状态。

5、 启动Logel,连接到ChannelServer,打开Logging开关。

6、 点击Logel的Assert菜单。

Assert菜单有3个选项:

Open Assert Frame:打开Assert窗口

Open Map File:打开符号映射文件。

Assert MS:使手机端出现Assert状态。

7、 由于手机已处于Assert状态,选择Open Assert Frame打开Assert窗口。

Assert窗口是一个使用命令行操作的窗口,支持的命令如下:

8、 键入1,查看Assert信息:

Assert信息分为3部分,版本信息、Assert信息、当前线程信息

> 1

Current Version:

        SW version: RS910-V1.1.2.RS910-V1.1.2

HW version: RS910-V1.1.0

File:  ccapp.c

Line:  8909

PASSERT(0)

Current thread info:

                       ID:               0x15

                       Name:             T_P_APP

                       Tcb_Addr:         0x0404a9ec

                       Last_Err:         0xa

                       Stack_Start:      0x0404d8a0

                       Stack_End:        0x0404f7df

                       Queue_Name:       Q_P_APP

                       Queue_Total:      256

                       Queue_Used:       2

                       Queue_Available:  254

                       Queue_Start:      0x0404f7e0

                       Queue_End:        0x0404fbe0

线程信息中包含了线程堆栈地址和队列的信息,对定位问题是非常有用的信息。

9、 键入8,查看调用栈:

最前面的就是当前Assert的线程,可以看到列出的都是函数地址,这是因为没有载入对应的符号映射文件。

> 8

 >

All Task Callback Function List:

 >

Current Task 21 (T_P_APP):

 > Entry at [0x00007936]

 > Entry at [0x0009acbc]

 > Entry at [0x0003ddac]

 > Entry at [0x0003a7ea]

 > Entry at [0x0003a93c]

 > Entry at [0x0003a97e]

 > Entry at [0x000109f6]

 > Entry at [0x00010b74]

 > Entry at [0x000006f8]

 > Entry at [0x00131ee4]

 > ***Reach top of stack.***

选择Assert菜单下的Open Map File,载入编译的手机版本的目标库的符号映射文件:

再次键入命令8,可以看到函数地址都转换成了易读的函数名:

 > 8

 >

All Task Callback Function List:

 >

Current Task 21 (T_P_APP):

 > SCI_PAssert()

 > CC_HandleEnterNumWinMsg()

 > MMK_RunWinProc()

 > MMK_DispatchToHandle()

 > DispatchWinMSG()

 > MMK_DispatchMSGQueue()

 > MMI_ProcessMsg()

 > APP_Task()

 > _ThreadEntry()

 > Entry at [0x00131ee4]

Ø  ***Reach top of stack.***

10、             获取当前寄存器的信息

键入命令2,获取寄存器的信息,R13寄存器是当前堆栈的地址指针:

> 2

        R0  = 0x00007970    R1   = 0x00000093

        R2  = 0x0000003f    R3   = 0x20000013

        R4  = 0x040500f4    R5   = 0x000022cd

        R6  = 0x00007959    R7   = 0x00000000

        R8  = 0x00000000    R9   = 0x00000000

        R10 = 0x0404d8a0    R11  = 0x00000000

        R12 = 0x00000000    R13  = 0x0404f668

        R14 = 0x00007959    PC   = 0x00007970

        SPSR= 0x20000033    CPSR = 0x20000093

 > SVC mode:

 >

        R13 = 0x0404f668    R14  = 0x00007959

        SPSR = 0x20000033

 > IRQ mode:

 >

        R13 = 0x043fc7fc    R14  = 0x00150e94

        SPSR = 0x00000033

 > Abort mode:

 >

        R13 = 0x043fca04    R14  = 0x00000000

        SPSR = 0x00000010

 > Undefined mode:

 >

        R13 = 0x043fc9fc    R14  = 0x00000000

        SPSR = 0x00000010

11、             查看其他线程的堆栈信息

使用命令7,可以获得所有线程的堆栈使用信息:

> 7

 >

Stack info:

 >

       Task_ID    Name            TotalSize[x1]   Max_Used[x2]    Available [x3]  Cur_Ptr    Start      End       

 >

       0x0        T_CM            4096       1972       2124       0x040516cc 0x04050e80 0x04051e7f

 >

       0x2        T_KPDSVR        800        656        500        0x04053164 0x04052f70 0x0405328f

 >

       0x4        T_AUDIO         6896       356        6540       0x4000e51c 0x4000cb90 0x4000e67f

…….

12、             读取内存信息,分析函数调用栈

当前栈顶地址是0x0404f668,可以读取栈顶指向的内存地址,分析函数调用栈,

这是定位Assert问题的非常重要的手段。

> 9

Read memory:

 > Input address:

 > 0x0404f668

 > Input size(0< size < 1024):

 > 1024

 > Read Memory Start Address: 0x0404f668    Size: 0x00000404

 > 0x0404f668    0x00000000 0x0000a778 0x0000000b 0x01050100

 > 0x0404f678    0x00007970 0x0404f668 0x00000039 0x0009ac1c

 > 0x0404f688    0x00090d68 0x000022cd 0x040500f4 0x00000000

 > 0x0404f698    0x00000000 0x00000000 0x00000000 0x0009ad0b

 > 0x0404f6a8    0x040500f4 0x00000000 0x00000000 0x00000000

 > 0x0404f6b8    0x00000000 0x00000000 0x00000000 0x00000000

 > 0x0404f6c8    0x00000000 0x00000000 0x00000000 0x00000000

 > 0x0404f6d8    0x00000000 0x00ef0123 0x00000000 0x0424b920

 > 0x0404f6e8    0x00000000 0x0003beb3 0x00000000 0x00000001

[x4]  >   0x0404f6f8    0x000000ba 0x00000091 0x00000000 [x5] 0x0424bc58

 > 0x0404f708    0x0424bc58 0x00000000 0x00000000 0x0003ddeb

 > 0x0404f718    0x0424bc58 0x00000091 0x00000000 0x0424bc58

 > 0x0404f728    0x00000000 0x0424bc58 0x00000000 0x0003a8b9

 > 0x0404f738    0x00000001 0x00000002 0x0424bb10 0x00000000

 > 0x0404f748    0x00000001 0x00000000 0x00000000 0x00000001

 > 0x0404f758    0x0424bc58 0x00000091 0x00000000 0x0404f790

 > 0x0404f768    0x00000000 0x00000000 0x00000000 0x0003a96b

 > 0x0404f778    0x0404f790 0x00003217 0x00000000 0x0003a9ad

 > 0x0404f788    0x00000001 0x00010a13 0x0424bc58 0x00000000

 > 0x0404f798    0x00910000 0x00000000 0x00000000 0x00010c2d

 > 0x0404f7a8    0x04239d50 0x00000000 0x00000000 0x00000737

 > 0x0404f7b8    0x00010b75 0x00000000 0x00000000 0x00000000

 > 0x0404f7c8    0x00000000 0x00131eff 0x00000000 0x00000000

 > 0x0404f7d8    0x00000000 0x5a5a5a5a 0x042399e0 0x0423a160

…………..

13、             Dump手机内存,分配函数调用栈

要分析函数调用栈,还可以使用Dump手机内存的方法。

键入命令3:

> 3

 >

Dumping memory to a file, please wait ......

 > ....................................................................................................................................................................................................................................................................................................................................... Saving memory data to the file:

 E:\work\SC6600D_BASE\Release\Tool_Cust\Logel\Bin\History\2006_03_17_17_44_51_9960.mem

 >

Dumping memory completed !!!

 >

打开生成的Dump文件,用出现Assert的线程的堆栈地址减去0x04000000,就是该内存地址在文件中的映射地址。

但是T_AUDIO任务的线程堆栈起始地址为0x4000cb90,而Dump的手机内存映射文件只有4306KB,很显然不适用上面的方法。用命令9读一段T_AUDIO的堆栈内存数据,然后在映射文件中查找,发现T_AUDIO的堆栈位置和映射文件中的位置的差为0x3FBFF0C0。

14、             查看内存使用情况

定位内存分配方面的问题,则命令4会有所帮助。

命令4把所有调用了SCI_Alloc的代码位置和所申请的内存大小都打印了出来,可以帮助分析:

> 4

 >

Allocated memory info:

 >

       No.      Size     FileName (Line)

 >

       2        372      efs_item.c (Line 1472)

 >

       3        800      efs_item.c (Line 1477)

 >

       4        128      efs_item.c (Line 1478)

……

15、             查看内存堆使用情况

输入命令5,可以查看当前的内存堆使用情况:

> 5

 >

Memory Pool Information:

 >

       Pool_Name           Start_Addr   End_Addr     Total_Num[x6]   Max_Used[x7]    Avail_Num[x8] 

 >

       System uint8 heap[x9]    0x04065e60   0x0420ee60   1740800    142428     1602228

 >

       pool_52 heap        0x0420ee60   0x0421e860   800        91         717    

 >

       pool_100 heap       0x0421e860   0x04221a60   100        6          97     

 >

       pool_300 heap       0x04221a60   0x04227410   70         10         61     

 >

       pool_600 heap       0x04227410   0x0422eeb8   50         7          45     

 >

       pool_1600 heap      0x0422eeb8   0x04256aa8   100        5          97     

[x10] 

需要注意的有2点:

1、  曾经使用的最大数目加上现在的可用数目应当大于等于最大可用数

2、  当固定大小的内存堆使用完后,再次申请会出现Assert。比如pool_100_heap已经使用了100个,当还想继续申请时,就会出现Assert。

16、             查看全局变量和静态变量

在定位问题时,可能还涉及到全局变量和静态变量,这时可以从编译生成的符号映射文件中,找到变量的地址,再用命令9或者从Dump的内存文件中获得该变量的值。

例如:

全局变量g_appinit_task_id在map文件中的定义如下:

g_appinit_task_id                        0x04050830   Data           4  app_tasks.o(.bss)

从前面Dump下来的文件的偏移地址0x50830处,可以读到该变量的值。

参考文档:

Channel Server 用户手册.doc:

Logel用户手册.doc

更多相关推荐:
试用期心得

试用期心得李*在试用期这段时间内,我学到了很多以前没有接触过的东西,经过努力,使自己有了一定的提高。对我来说,这段时间不仅仅是工作,也是对自己的一个考验、一个学习和锻炼的机会。从这段时间来看,发现自己渴求的知识…

试用期工作心得

试用期工作心得尊敬的领导您好我叫龙京雅,于20xx年x月x日成为公司的试用员工,根据公司需要,目前担任品保部环保工程师一职,负责供应商环保稽核,供应商GP资料更新,供应商ROHS&REACH及相关环保资料确认,…

试用期满 心得体会

试用期满心得体会职位电气控制设计姓名试用期顾名思义就是用人单位考察员工是否符合本公司的用人要求我从20xx年7月13日开始进入机器人系统有限公司的新员工试用期转眼间试用期即将结束回顾一步一步走过来的三个月试用期...

试用期心得体会

黄荣波不知不觉间,到利民学校工作,已经一个月了。在学校领导的殷切关怀和老教师的悉心指导下,我受益匪浅。一个月的时间,我逐步适应了环境,熟悉了业务,并渐渐融入进了这支充满朝气、活力、有蓬勃生命力的大家庭。作为一名…

试用期工作心得体会

关于业务考核的个人总结转眼间,来到华强环保集团已经快一个月了,这是我们大学毕业的第一份工作,也是我们从学校迈向社会的第一步,非常感谢华强能够给我们这样一个展现自己的机会,我们也非常珍惜,但是我们差的还太多,要想…

试用期转正心得体会

尊敬的公司领导,人事部经理:你们好!时间过得很真快,转眼就两个月过去了,原先的教师生活已渐渐离我远去,现在视频文档这一块的工作慢慢变得顺其自然了。在此十分感谢公司的领导和前辈们对我的关照。两个月的试用期工作下来…

软件使用心得

软件学习心得超级兔子使用心得Windows操作简便,但其好多功能却不能简单通过点几下鼠标就能实现。有经验的电脑虫们通过修改注册表来达到实现某些特殊设置的目的令许多菜鸟们望尘莫及。而且,电脑使用时间长了,各种系统…

ljja1上传的锐起XP试用心得

ljja1上传的锐起XP试用心得首先感谢ljja1给我了我们这个好东东经过试用感觉良好服务器配制CPUAMD2800主板翔升NF2内存KINGMAX256X3硬盘金钻120G工作站配制CPU赛扬20主板技嘉84...

CRM系统试用心得

CRM系统试用心得在当今由以客户价值为中心的企业管理中CRM系统适时诞生使企业由从quot产品中心quot向quot客户中心quot过渡的战略中更加数据化和科学化我下载试用的是行健动力客户关系管理系统在该系统的...

试用人员心得表

有限公司试用人员心得表姓名岗位部门到职日年月日试用期满日年月日注1如一张不够可另附纸2请于月日之前将此表交部门负责人转交试用员工本人填写

试用期之心得报告格式

試用期之心得報告填表日期年月日填表單位

试用期工作心得

试用期工作总结一前沿不知不觉在银石工作已两个多月了转眼就到国庆回顾这2个多月的工作历程作为公司的商务人员工作没取得什么成绩但确实存在不少的问题为了更好的完成商务中心的营销工作实现公司与个人双赢写下这篇总结以反思...

试用心得(29篇)