MTK 的调试
52RD 上曾有朋友让我写一些调试技巧方面的文章.调试对于软件是十分重要的,但却不是一
篇二篇文章能讲清楚的.有很多调试技巧都是零零碎碎的东西,用的时候能很容易使用,但要
写出来时,却还是比较麻烦的.
MTK 的调试一般来说可以分为仿真调试与手机调试.这两种调试对于研发新功能,修改 BUG,
研究算法都是十分重要的.当然,这两种调试也有差异,有时会出现在模拟器运行正常,在手机
却运行失败,或者相反,这就突出了软件模拟环境与硬件手机环境的差别.原因可能是各种各
样的,比如可能是有些硬件软件没有办法模拟,有些新功能对硬件依赖强,不能模拟,新软件的
有些函数只能在手机上运行,没有写相应的模拟器代码.等等原因都会导致两者差异.这里不
一一赘述,大家知道模拟器和手机有差异就行了.
模拟器调试具有直观,快速,追踪方便能优点,受到很多 MMI 开发者的喜欢.而有关模拟器的调
试,其他也就是 VC 调试功能的使用.由于国内软件教育重编程,算法,轻调试,所以很少有系统
的调试方书的书.在开发过程中,我也见过许多人压根就不使用模拟器,他们认为模拟器也就
是在没有手机的时候使用.详细讲解模拟器的调试就放到以后,因为模拟器断点,内存,堆栈,变
量各个方面的调试,详细写来都可以成一篇文章.这里先讲一个手机调试的 TRACE 使用.以前
曾写过一篇 DUMP 调试的文章.通过出错的 DUMP 信息查找错误.有兴趣的朋友可以参考.
http://www.52rd.com/Blog/Detail_RD.Blog_blogercn_19169.html
1.在 MTK 平台,我们最常使用的 TRACE 函数是 kal_prompt_trace 函数,这个函数是系统提供
给我们的用于在 catcher 里调试错误的.在这个函数不能使用的场合,有时我们会使用函数
system_print 或者 dbg_printf,这两个函数可以不使用 catcher 的情况,使用 WIN 自带的工具超
级终端来调试程序.有时驱动的朋友会自己用函数 PutUARTBytes 写自已 TRACE 函数,这些
函数可以使用超级终端调试,如下,就是别人写的一个 TRACE 函数.打印某一块数据的内容,
常常 TRACE 内存数据,指定地址,指定大小
void perun_dump(void *buf, prn_int16 size)
{
#ifdef PRN_TRACE_OPEN
#ifdef MMI_ON_HARDWARE_P
char str[2048];
char *ptr = (char*)str;
char *ptr1 = buf;
int i = 0;