1、MTK trace工具使用补充说明
本文档主要介绍如果查看trace信息,以帮助在手机上的调试,trace_demo文件夹中的例子代码可以参照。
(下面截图不清楚的话请见附件的图片。依次是图1,图2,图3)
一、平台自己打印的一些信息:
1.1、当前编译该mrp文件的SDK版本号
该trace信息显示的是当前编译该mrp文件的SDK版本号。
1.2、内存消耗:
该trace信息显示的是当前的内存消耗量,由于加载图片或申请内存的时间不同,内存消耗量也是实时变化的,trace信息显示的是当前的内存消耗量,该信息可以查看应用是否有内存泄露等问题。
例子代码中刚进入是没有加载图
2、片的,再选择开始后,加载图片并且显示图片,所以这两个时候的内存消耗是不同的。
1、下图是没有加载图片时候的内存消耗:
2、下图是加载图片后的内存消耗:
Trace信息说明:
VM_LOG:mem top =325232,left =426288,never use =411800
(单位是B)
mem top是栈顶内存的峰值,left 是当前剩下的内存,never use是还未使用的内存。这里mem top并不是该游戏消耗的内存峰值,它只是手机栈顶的峰值,所以当前游戏消耗的内存峰值是手机内存减去never use,就是游戏在当前的内存峰值。简单描述如下:
游戏
3、消耗内存峰值 = 手机内存 — never use;
Left表示当前剩余内存,它包括游戏中自己释放的内存和never use。
1.3其他打印消息
其他打印消息包括手机IMEI号、IMSI号等其他一些信息。
二、自己调试时候打印信息
该类信息能帮助我们在手机上调试应用,并能尽快定位问题。
例子代码中有这类信息,就是用mrc_printf();打印出来的信息,例如在trace_KeyEvent函数中,我打印了mrc_printf("g_main_menu_focus = %d", g_main_menu_focus);在你按键响应后就能打印出g_main_menu_focus的确定
4、值。还有其他一些打印调试的地方请见例子代码。
一些常见的trace方法:
2.1、定位在何处出问题
游戏在手机上运行时候,有时候死机问题难以定位具体位置,这时候可以抓trace确认,也就是以前的打LOG方法,只是抓trace比LOG方法方便直观得多。
例如:
int32 function(void)
{
Mrc_printf(“Function is start”)
Function1();
Mrc_printf(“Function1 is end”);
Function2();
Mrc_printf(“Function1 is end”);
Function3();
5、
Mrc_printf(“Function1 is end”);
Function4();
Mrc_printf(“Function1 is end”);
}
这时候只要查看trace信息,哪个没有打出来就能大致知道是哪个函数执行有问题,这样多次打trace就能确认问题所在。
2.2、注意事项
1、这里需要注意的是, 没打出LOG的地方不一定就是这个函数执行有问题,因为mrc_printf()相对比起来优先级较低,有可能缓冲区中的trace还没完全打完,游戏就已经死机了,所以在怀疑死机的地方直接return,在一步步进去打trace以确定问题。
2、如果画面刷新是定时器刷新时,则
6、定时器时间设的太短会导致LOG可能打不出来,建议打LOG调试的时候定时器时间开大一点,建议开100ms以上,以便能打出LOG。或者在定时器循环函数中把定时器调用放在后面,其他处理函数放在前面。这个在例子代码中定时器循环菜单中有相关代码,主要是在drawBmp1()函数中,如果定时器时间设为50,则手机上不能打出那句trace,如果时间设为100,则能正常打出;或者把mrc_timerStart的调用放在该函数尾部,也能正常打出LOG。
3、打印字符串不能过长,如果调试时打印的字符串过长,可能打不出来。
4、具体可看例子代码,上面有相关注释。
2.3、查看游戏里面各个数据是否正确
直接打trace,查看游戏各个数据。
三、结言
抓trace能够帮助我们在手机上调试应用程序,trace有很多,该文档只介绍了几种常用的,他不一一叙述。具体可参考例子代码中一些打trace的地方。