资源描述:
《mtk平台软件调试方法及技巧84363》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、mtk平台软件调试方法与技巧84363mtk模拟器调试前篇文章介绍了手机调试的TRACE技巧,MTK手机调试是比较简单的,除了打TRACE,找ASSERT,分析DUMP外,剩下的就是经验了,有经验的人看到现象就能猜到问题出在什么地方,简单看一下TRACE只是为了确认自己的猜测.初涉此道的朋友往往需要时间,慢慢积累经验.要达到熟练,就需要有空的时候多读多研究代码.熟练的掌握了代码,解决问题就会熟能生巧.MTK的模拟器调试说没技巧也是对的,说有技巧也不错.因为模拟器的技术与其说是MTK经验,不如说是VC经验.由于模拟器能在没有样
2、机的情况做大量的UI方面的开发,同时模拟器具有快捷,所见即所改等优点,因此,受到很多开发老手的青睐.熟练掌握模拟器使用技巧,对于提高工作效率,节省资源具有很积极的意义.工欲善其事,必先利其器.欲了解模拟器调试,就要先了解VC使用.VC调试过程中经常使用的快捷键如下:vc++断点的使用:按F9(设置断点),F5调试,F10单步调试,shift+F5退出调试F10单语句执行,F11单指令执行,Ctrl+F10执行至光标处;F9按行设置/取消断点,Alt+F9可按行,按数据或按消息设置断点;调试时,按Alt+3打开跟踪窗口,Alt
3、+4打开变量窗口,Alt+5打开寄存器窗口,Alt+6打开内存窗口,Alt+7打开堆栈窗口,Alt+8打开汇编指令窗口;1.只要你有源代码,拥有一个模拟器是一件很容易的事.当然,有些情况下,这对于初入MTK的人来说,也是困难的,特别是在一些代码管理不善,公司人员众多,员工流动频繁的公司,你永远想象不出他们的代码会有多糟.不过一般情况下,我到一个新公司,都会试着去使用他们的代码编译得到模拟器,不管他们的代码多么糟,我总能快速的编出模拟器来.只要三个步骤:a.在编译模拟器前请关掉所有SP的宏,这是很重要的,很多SP都不提供在模拟
4、器下运行的库,所以一个项目SP越多,在模拟器下,他无法识别的函数也会越多b.在编译过程中遇到错误,可以把所有与显示无关的代码全部使用#ifdefWIN32宏括起来,把所有不认识的类型使用typedefintxxx;重定义.把一些不能识别的宏定义使用WIN32括起来重定义一下c.在生成MODIS时,会遇到大量不认识的函数,如果少于50个,全部建成voidxxx(){}类型的空函数.如果多于一百个,尝试查找这些函数的来源,如果是相关SP的,就再次补充关掉相关SP.当然如果你不怕麻烦,也可以把这一百个函数建成空函数.一般来说,把所
5、有第三方功能和与MTK无关的功能关掉的话,不能识别的函数一般不会超过十个.经过这样三步,一般情况下你都能得一个差不多可以使用的模拟器.有了模拟器,你就可以进行下面的工作了.如果你仍然无法获得模拟器,建议咨询你的项目领导,如果你的领导也无法解决,说明这个软件组是一个组员变动很快,或者说缺乏条理性的部门,当然也有可能这个部门的程序员都是一些MTK的顶尖层高手,他们的程序从来不需要调试.总之这是会让人疯狂的部门.2.如果你顺利到到一个模拟器,那么就可以开始调试了.首先说一下断点,VC中的断点分三大类,一类是本地断点,一类是数据断点
6、(也称之为条件断点,有人称之为高级断点),还是一类是消息断点;这三类断点分别对应于快捷键"ALT+F9"打开的对话框中三个选项卡.由于消息断点是用于跟踪WIN的消息,所以在MTK中用不着.在模拟器中一般我们只使用本地断点与数据断点.本地断点和数据断点在BUG调试中举足轻重,熠熠生辉。熟练掌握断点技巧,可以使工作事倍功半。可能有些人会使用断点,但却不知道断点在模拟器中有什么妙用.断点有两个最常使用也的作用,一是跟踪代码执行情况,二是观察断点处局部变量值的变化.这两个功能应用最多.但他在MTK模拟器中还有两个隐含的用途,一就是快
7、速定位文件,MTK本身的源代码大约有差不多上万个文件,而加入SP后,代码大约已经超过了万数.在这里面查找文章,查找函数,是一件很困难的事,这时就需要使用断点了.你在代码阅读工具SI中可以很轻松的利用"CTRL+O"打开文件,也可以使用"F7"快速定位到函数,但在VC中却没这么方便,不过你可以使用断点,比如想在VC中打开某个文件wgui_categories_CM.c,只要VC中使用"ALT+F9",在breakat编辑框里输入{,E:JMT_1120plutommimmiGUIGUI_SRCwgui_catego
8、ries_CM.c,}.4693,按F5执行DEBUG后VC就能自己定位到这个文件wgui_categories_CM.c的4693行。这是文件断点,也可以打函数断点,比如文件wgui_categories_CM.c的4693行对应的是函数ShowCategory16Screen,也可以直