刚才和同事以及老大调查了一个AMSS里面导致crash的问题
具体现象是在打电话的过程中发送sms就会crash。
最开始取了qcril的log进行调查,通过加log的方式发现qcril发送sms的流程都已经走完了,但是没有得到AMSS的返回消息就挂掉了,初步定位问题为AMSS内部处理有问题。
后来为了定位问题代码打算使用trace32设置断点调试的方式来debug调试,在自己的机器上配置了AMSS编译环境后,打开debug的选项进行编译,将断点设置在err_fatal_put_inte… 的出错处理函数,然后复现bug,发现走到了断点,通过切换task到wms发信死在wmsmsg.c文件的address:0x100706E 对照代码窗口发现显示是在send_msg。。。。。函数的3322到3325行之间出了问题,但是通过代码对比发现对应行数并不是问题函数内部,推断肯能是在编译预处理阶段产生了代码行号的偏移,为了定位偏移行数,使用debug用的AMSS重新取了QXDM的log,对比log输出发现,问题函数内部打印的log在代码实际位置和QXDM取的log显示位置存在56行的偏移,结合之前显示的问题点定位3322行 应该对应3266行,在结合trace信息看到在出问题之前有一次函数调用 并且上下有3行的间隔 对比代码找到被调用的函数,发现被调用函数与3366间隔的三行内只有一条指令,符合trace看到的情况 推断问题代码就是此条指令,注释掉再编译 调试发现问题不能复现了 确定就是此条指令引起!
明天继续调查详细的原因 ,在这做个笔记,省得忘了怎么查的。。。。有记不清楚的地方明天补充,睡觉了。。。太晚了。。。