システム異常埋め込み点
2515 ワード
DropBox Managerでは、次のタイミングで関連情報を取得します.
a、異常シャットダウン前
SystemServerでは、次のタイプのエラーが収集されます.
watchdog、anr、wtf、lowmem、native_crash、crash
TAG = watchdog、anr、wtf、lowmem、native_crash、crash
この場合、ActivityManagerServices.addErrorToDropBox()インタフェースは、情報を収集し、DropBoxに追加します.addErrorToDropBox()でブロックして、より多くのログをキャプチャできます.
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の時、これは原生で来ればいいです.