• 系统异常埋点


    DropBoxManager会在下面时机抓取相关信息:

    a、出异常关机前
    SystemServer会收集下面类型报错:watchdog、anr、wtf、lowmem、native_crash、crash
    TAG = watchdog、anr、wtf、lowmem、native_crash、crash

    此时是通过ActivityManagerService.addErrorToDropBox()接口来收集信息并加入到DropBox中。可在addErrorToDropBox()中做拦截以抓取很多其它的日志:
    12883    public void addErrorToDropBox(String eventType,
    12884 ProcessRecord process, String processName, ActivityRecord activity, 12885 ActivityRecord parent, String subject, 12886 final String report, final File logFile, 12887 final ApplicationErrorReport.CrashInfo crashInfo) { 12888 // NOTE -- this must never acquire the ActivityManagerService lock, 12889 // otherwise the watchdog may be prevented from resetting the system. 12890

    b、原生对/data/tombstones文件夹注冊了一个观察者
    TAG = SYSTEM_TOMBSTONE

    假设系统抛一个tombstone未导致关机,那么就会将此次报错add到DropBox中,这是通过DropBoxManager.addText()接口加入信息到DropBox中的。
            sTombstoneObserver = new FileObserver(TOMBSTONE_DIR.getPath(), FileObserver.CLOSE_WRITE) {
                @Override
                public void onEvent(int event, String path) {
                    try {
                        File file = new File(TOMBSTONE_DIR, path);
                        if (file.isFile()) {
                            addFileToDropBox(db, prefs, headers, file.getPath(), LOG_SIZE, "SYSTEM_TOMBSTONE");
                        }
                    } catch (IOException e) {
                        Slog.e(TAG, "Can't log tombstone", e);
                    }
                }
            };
    这个逻辑在frameworks/base/core/java/com/android/server/BootReceiver.java文件里。


    c、frameworks/base/core/java/com/android/server/BootReceiver.java中存在开机后抓取异常信息的逻辑
    整机重新启动后(Kernel和Flyme)TAG = SYSTEM_BOOT
    Flyme重新启动:                           TAG = SYSTEM_RESTART
    从Recovery启动:                  TAG = SYSTEM_RECOVERY_LOG
    开机扫描/data/tombstones文件夹TAG = SYSTEM_TOMBSTONE
    开机后原生逻辑已经抓取了一些信息,但不够多和细。
    建议
    在SYSTEM_BOOT时,不用抓什么日志。由于整机重新启动。全部信息被冲掉;
    在SYSTEM_RESTART时,可尝试抓取Android和kernel日志,这时可能会抓取到实用信息。可是因为开机已经有一段时间了,异常日志可能已被冲掉。
    在SYSTEM_RECOVERY_LOG时,这个按原生的来即可;
  • 相关阅读:
    企业级开发的权限管理
    asp.net mvc 中的ajax
    拖拽(非原创)
    数据库中主键和外键的设计原则
    第六篇续:动态创建 ListView 模板
    动态创建 ASP.NET Web 服务器控件模板(出自MSDN)
    ASP.NET跨页面传值的几种方法
    奇文共赏 史记货殖列传王石传
    需求该如何分析?
    PopupControlExtender 控件的使用(转)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5344583.html
Copyright © 2020-2023  润新知