MTK调试的奇淫技巧
来源:互联网 发布:数控冲孔编程公式 编辑:程序博客网 时间:2024/05/19 13:28
MTK调试的奇淫技巧
(2012-4-12 18:02)不言而喻,无论是开发还是技术支持,与bug打交道在所难免。如果掌握了一些好的方法的话,可以起到事半功倍的效果。
大致说来,mtk平台,无非是以下几种方式加trace信息:
一、向串口输出。优点,方便,快捷,缺点是打印太快,有些重要信息不易获取,不能过滤,要搜索半天,rder们乐此不彼。比较适合调试驱动程序。
二、使用catcher工具。缺点,使用起来优点复杂。优点是能获取足够多的trace信息,可以过滤掉不关注的模块,供快速分析定位问题。比较适合开发一般MMI应用。
三、写文件。兼备上述第一点盒第二点的优点,缺点是需要再使用ultra edit等其他第三方工具进行分析。此种方法适合开发利用socket进行联网的程序。
mtk平台是基于arm平台,大家一般都会遇到data abort的问题,一般是内存访问异常,如数组越界,内存越界(指针),分析定位这类问题,一般都是与内存操作相关的函数引起的,如strcpy,memcpy,kal_wstrcpy等等。一般是根据程序的运行流程,加一些函数打点轨迹的trace,如“enter [EntryIdleScreen],6651”(6651是行号)。一般能分析到程序是挂在哪个函数里面。
倘若不能定位是挂在哪个函数,有点小技巧就是,在可疑的函数里加一些kal_sleep_task,让MMI sleep一下,以便将尽可能多的信息打印出来。
倘若此法失效。那只有根据程序挂了之后的堆栈,进行分析了。这种方法已经有人介绍,在此不赘述了。值得注意的是,lr寄存器的内容,值得关注,这是函数的返回地址,根据这个地址,一般能查到调用函数的地址。
对于prefetch abort和undefined instruction,一般是内存被踩了导致的。需要花相当大的时间与精力分析了。只有多加trace,此外,貌似没有更好的方法。
另外,arm一般没有除法指令,以及对于float的支持,尤其是不给力。所以在mtk里,尽量不要使用浮点数,一是运行起来颇慢,更要命的是,很容易出现prefetch abort,undefined instruction,data abort。尤其是将浮点数,格式输出到缓冲区里的时候,切忌使用kal_wsprintf,必须使用kal_printf,否则后果不堪设想。
下面是mtk工程里的一个实现函数,颇为有用:
dev_extern dev_void devlib_ftoa(dev_int8* pBuffer, dev_real64 fvalue, dev_int nDecimal)
{
dev_int8 format[16];
sprintf(format, "%%.%df", nDecimal);
sprintf(pBuffer,format,fvalue);
}
供大家参考。
另外,建议开发者多参考mtk工程里,别人写的成熟代码,“拿来主义”,不能一知半解(mtk的API文档一般不全,代码函数的注释也不能望文生义)。
希望大家开发快乐,快乐开发!
这是我的一点小小心得,与诸位分享。有不妥之处,请大家不吝指出,以期共同进步!
- MTK调试的奇淫技巧
- MTK调试的奇淫技巧
- 调试 C 程序的奇淫技巧
- 反调试与绕过的奇淫技巧
- iOS 的奇淫技巧
- 利用 HookZz 实现反调试与绕过的奇淫技巧
- 一些位计算的奇淫技巧
- 一些CSS的奇淫技巧
- 位运算的奇淫技巧
- Oracle数据库的奇淫技巧
- 图片伪装病毒的奇淫技巧
- c++ 宏的奇淫技巧
- html的自定义标签 奇淫技巧
- eclipse奇淫技巧
- eclipse奇淫技巧
- "奇淫技巧"
- PHPSTORM奇淫技巧
- struct-奇淫技巧
- 设置桌面背景
- IOS---NSdata 与 NSString,Byte数组,UIImage 的相互转换
- 判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
- ASP.NET MVC 学习 --- 第一课
- Spring MVC 异常,怎样显示比较友好?
- MTK调试的奇淫技巧
- TCP TIME_WAIT状态的用处和影响
- .NET Framework各版本比较
- [原创] Linux中/proc目录下文件详解
- JDBC总结
- 图解ARM Linux的启动全过程
- GetProcessMemoryInfo函数
- vim创建可执行文件配置
- Android如何在TextView中显示图片