【MTK】user版本下输出aee db 和 anr trace

Aee 属性

persist.mtk.aee.filter

aee 有对上层三方app 进行过滤, 如需抓三方app 的exception, 可以设置属性:
setprop persist.mtk.aee.filter 0

// frameworks/base/core/java/com/mediatek/aee/ExceptionLog.java
public void handle(String type, String info, String pid) {
    Log.w(TAG, "Exception Log handling...");
    if (type.startsWith("data_app") && !info.contains("com.android.development")
            && (SystemProperties.getInt("persist.mtk.aee.filter", 1) == 1)) {
        Log.w(TAG, "Skipped - do not care third party apk");
    return;
}
// 如想抓取第三方APK触发的异常,需要设置persist.mtk.aee.filter的属性值为0

建议正式出货版本去除此修改,会影响系统performance

ro.aee.enforcing

这个属性是是否开启强制aee mode的开关,仅在debug时可以关掉,正式版本必须要开启,否则会影响CTS.
user版本上不可以任意切换AEE mode,如果要切换,需要关掉aee enforcing; 或是开mobilelog后,mode也会由4切到3. 所以一般开启 ro.aee.enforcing

persist.mtk.aee.mode

关于aee mode,我们一般只会用到mode 3跟mode 4;
mode 3对应exception level 1, eng load默认会是在这个mode     // exception level 1 对应FATAL +EXCETPTION + REMINDING(manual dump)
mode 4对应exception  level 0user/userdebug load默认会是在这个mode;  //exception level 0只抓fatal db.

user版本上不可以任意切换AEE mode,如果要切换,需要关掉aee enforcing; 或是开mobilelog后,mode也会由4切到3.

persist.aee.core.direct

android/vendor/mediatek/proprietary/external/aee/direct-coredump/direct-coredump.c
     // eng&userdebug load direct-coredump default enable
26     // user load direct-coredump default disable
27     if (is_user_built()) {
28         property_get("persist.aee.core.direct", value, "disable");
29     } else {
30         property_get("persist.aee.core.direct", value, "enable");
31     }

persist.aee.core.dump

android/vendor/mediatek/proprietary/external/aee/config_external/init.aee.customer.rc  

38 on property:persist.aee.core.dump=enable
39     write /proc/sys/fs/suid_dumpable 1
40     write /proc/sys/kernel/core_pattern "|/vendor/bin/aee_core_forwarder /data/vendor/core/ %p %s UID=%u GID=%g"

ANR属性

persist.anr.dumpthr

user 版本:三方app 默认不做ANR dump, 如需抓三方app 的ANR exception, 可以设置属性
setprop persist.anr.dumpthr 1

// vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/anr/AnrManagerService.java
         /**
1608      * Reduce the 3rd party's anr dump info in user load for performance
1609      */
1610     private boolean needReduceAnrDump(ApplicationInfo appInfo) {
1611         return IS_USER_LOAD && !isBuiltinApp(appInfo) && !(SystemProperties.getInt(
1612                 "persist.anr.dumpthr",NORMAL_ANR_FLOW) == ENABLE_ANR_DUMP_FOR_3RD_APP);
1613     }

建议正式出货版本去除此修改,会影响系统performance

user 版本开启AEE

1  如果需要user load 中,在打开mtklogger后(必须打开mtklogger抓android ap log),抓到普通exception db ,并且NE 中有coredump 文件 ,修改如下:
/vendor/mediatek/proprietary/external/aee/config_external/init.aee.customer.rc 文件中添加
on init
     setprop ro.aee.enforcing no                    #change for 1.1
     setprop persist.aee.core.dump enable      #change for 1.2
     setprop persist.aee.core.direct enable
(注意此修改后, 无法通过CTS 安全测试项, 在正式发布版本时, 需要恢复默认设置,把上面修改去掉)
2  android O 需要修改的部分
2.1   aee 有对上层三方app 进行过滤, 如需抓三方app 的exception, 可以设置属性
      setprop persist.mtk.aee.filter 0
2.2   user load :三方app 默认不做ANR dump, 如需抓三方app 的ANR exception, 可以设置属性
      setprop persist.anr.dumpthr 1

如发现aee debug 抓db 有问题 ,请先确认系统环境, getprop | grep aee  或者 打开ap log 中的properties 文件确认以下属性:
[persist.mtk.aee.mode]: [3]         //需打开mtklogger 抓mobilelog 才会 切换成 mode 3 
[persist.mtk.aee.filter]: [0]
[persist.aee.core.dump]: [enable]
[persist.aee.core.direct]: [enable]
[ro.aee.enforcing]: [no]

user 版本开启ANR

设置属性: setprop persist.anr.dumpthr 1

存放路径

ANR : data/anr/目录

AEE:不同异常类型DB存放路径不同
Before android o :

/data/aee_exp;
/sdcard/mtklog/aee_exp;

After:

JE/ANR/SWT                           db存放在data/aee_exp
KE/HWT/HW_REBOOT/EE/NE   db存放在data/vendor/mtklog/aee_exp

android/vendor/mediatek/proprietary/external/aee/config_external/init.aee.customer.rc

1 on post-fs-data
2     mkdir /data/aee_exp 0755 root root
3     mkdir /data/vendor/mtklog 0755 root root
4     mkdir /data/vendor/mtklog/aee_exp 0755 root root

NOTE:
不能手动删除/data/aee_exp, /data/vendor/mtklog/aee_exp 目录:

aee db 存放路径 /data/aee_exp, /data/vendor/mtklog/aee_exp 的selinux标签如下, 这个标签是在init 创建目录的时候打下去的:

  /data/aee_exp(/.*)? u:object_r:aee_exp_data_file:s0
  /data/vendor/mtklog/aee_exp(/.*)? u:object_r:aee_exp_data_file:s0

如果删除aee db 的存放目录, 再创建的时候会沿用父目录的selinux 标签( system_data_file),导致aee 没有selinux 权限不能正确产生db(重新开机后,init不会强制更新标签,还是会使用 system_data_file 的签名);

solution:有root权限的手机有可能误删,会影响抓DB。解决办法,执行restorecon -R xxx/aee_exp命令即可

开启实例

// android\vendor\**\common\configs\**_common.mk
ifeq ($(strip $(**_DEBUG_SUPPORT)),true)
#enable coredump
PRODUCT_PROPERTY_OVERRIDES += persist.aee.core.dump=enable
PRODUCT_PROPERTY_OVERRIDES += persist.aee.core.direct=enable
PRODUCT_PROPERTY_OVERRIDES += persist.anr.dumpthr=1
PRODUCT_PROPERTY_OVERRIDES +=  persist.mtk.aee.filter=0
PRODUCT_PROPERTY_OVERRIDES +=  ro.aee.enforcingr=no
endif

注意:ro.aee.enforcing关掉会影响CTS

你可能感兴趣的:(其他)