システム異常埋め込み点


DropBox Managerでは、次のタイミングで関連情報を取得します.
a、異常シャットダウン前
SystemServerでは、次のタイプのエラーが収集されます.
watchdog、anr、wtf、lowmem、native_crash、crash
TAG = watchdog、anr、wtf、lowmem、native_crash、crash
この場合、ActivityManagerServices.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
システムが1つ投げたら
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の時、これは原生で来ればいいです.