UEIT调试协议栈的步骤 联系客服

发布时间 : 星期一 文章UEIT调试协议栈的步骤更新完毕开始阅读3a79bd541a37f111f0855b07

UEIT调试协议栈的步骤

我们知道,运行UEIT时,实际上运行的是BSSIM和MSSIM。一般在最初调试脚本和后期测试case时,实际上是同时起的BSSIM和MSSIM。但是如果协议栈代码有问题,导致case fail(要保证脚本没问题)或者MSSIM Assert,就需要调试协议栈。下面简单介绍一下UEIT调试协议栈的步骤。 首先,调试协议栈一个主要的思想是:BSSIM由UEIT启动,而MSSIM就是我们实际编译好的code,UEIT启动后,会控制编译好的code运行(据hao.xu说这是UEIT的精华,他也不清楚怎么能自动控制编译好的code运行。据说只有junbo.han、jason.gao等少数人知道,而且这是个“不能说的秘密”)。正因为如此,在运行tRunner时,要设置Start-up为“Only BSSim(”见下图,一般在最初调试脚本和后期测试case时,要选择“Both BSSim and MSSim”)。

然后,打开VC工程:\\\\P_TianJi2\\TDPS_UEIT\\Project\\TDPS_UEIT_TIANLONG.dsw,由于模块很多,所以打开需要一段时间。打开后先做一些设定:Project -> Settings -> Dedug,Excutable for debug session里面输入MSSIM的可执行文件所在的路径:\\\\P_TianJi2\\TDPS_UEIT\\UEITTools\\Bin\\MSSIM_S\\MSSim_S.exe;Program arguments里面输入tRunner运行时的端口(MS Port):(4680)。

在打开的VC工程里,左边可以看到很多模块的代码,如:DM_PS、Layer1、MSDevKernel、RTOS等。其中,以tdd开头的模块,只有tdd_nas对我们是有用的,其它不用关注,W也不会跑到那里面。右击MSDevKernel模块,勾选“Set as Active Project”。如果我们要在代码里加断点,首先要对相应的模块进行编译。编译前先把指定目录下相关模块的库文件取消“只读”权限。库文件在:\\\\P_TianJi2\\Project\\TD_PS\\Bin\\ 里。编译好相关模块后再编译MSDevKernel模块。然后就可以在相应模块的代码里加断点了。

以我刚测出来的一个assert问题为例。在RTOS模块下,threadx_assert.c代码里,win32_sci_Assert这个函数开头加个断点(这是SCI_ASSERT的出口,一旦出现PS的assert,就可以看到相应的函数调用栈,可以将这个断点始终设上),然后F5 Go,同时运行tRunner。一段时间后会出现assert,同时程序会停在win32_sci_Assert这个函数的开头,右下角会有一些assert信息,点进去看看,可以看到发生assert的地方。Stop Debug,然后可以简单地分析一下,或者直接找对应模块的开发负责人。在这里,发生assert的原因是WRRC回给GRR的WDM_GSM_RAT_CHANGE_TO_WCDMA_CNF里带的ho_type的值(6)和预期的WDM_GSM_RAT_CHANGE_TO_WCDMA_REQ里带的rr_dm_rat_chg_type的值(12)不一样导致的。新建一个SourceInsight工程,把2G和3G的代码都包含进去,跳到定义的地方,可以看到ho_type定义为6表示Cell Reselect,12表示Fast Return。

当然,assert算是比较好分析和调试的,如果case fail(脚本没有问题),就要熟悉相关的协议和代码了,要找到fail的地方不太容易。这时可以直接找模块负责人来看现场,或者电话骚扰一下TA。下面是一些模块的负责人: 2G 孙宇(2624) / 麻鹏(2106) W L1SIM/Meas 庄云腾(1562) W L2 林亦桐(1583) W RRC 王国锐(2118) NAS 潘枫春(3138)