1.性能日志固件-捕捉包含固件性能日志的内核日志
adb shell
cd /d/msm_vidc
su
echo 0x1015 > debug_level
echo 0x20 > fw_level
2.
adb shell “echo 0x1000 > /d/msm_vidc/debug_level”
adb shell “echo 0x3F > /d/msm_vidc/fw_level”
3.禁用音频(无音频输出)
adb shell setprop persist.debug.sf.noaudio 1
4.如果需要关闭offload 可以设置属性值 audio.offload.disable 为1.
adb shell setprop audio.offload.disable 1
5.设置日志等级
setprop persist.xxx.log.level YVV7,有的是通过属性来控制日志等级
6.adb shell dumpsys package xxxx
adb shell dumpsys media.palyer
7.异常日志分析
搜索exception,DEBUG打印出的调用栈信息
8.常用打印格式
打印int64_t, %lld
9.用__func__,__LINE__,定位问题
10.打印对象地址
%p,对象的话就是this指针。
11.编解码的配置文件
/etc/media_codecs.xml, media_profile.xml,开机就解析。
12.mediaserver crash 问题(multimedia相关的crash问题分析,各类crash问题类似)
tombstone的log默认只有内存地址,因此需要还原代码对应的调用函数。为了恢复back trace高通平台采用如下方法:
1)用stack工具处理tombstone日志或者包含back trace的logcat日志
source build/envsetup.sh
lunch xx
stack <tombstone file or logcat contains backtrace> >>crash_mapping.log
2)使用addr2line处理
如已知backtrace的内存地址 0x1234abcd (带了符号信息的so才可以读出内存地址对应的函数)
addr2line -f -e 环境中编译出来的带symbols的so的路径(out/xx/symbols/system/lib/libmedia.so) + 0x1234adbcd
13.高通无symbol的so
没有symbol文件,我们只能采用反编译或根据so文件的动态符号表来定位了。
用objdump -t xxx.so | sort,看相近出来的地址附近的函数,可能是挂的地方。
这种方法只能粗略估计,毕竟这些so已经做过优化了。 |
|