• anr和crash文件分析,特征码提取


    anr

    1. String str = "\"main\" prio=5 tid=1 Runnable\n" +
    2. " | group=\"main\" sCount=0 ucsCount=0 flags=0 obj=0x7093ce68 self=0xb400007cc5e91380\n" +
    3. " | sysTid=12559 nice=-10 cgrp=top-app sched=0/0 handle=0x7e0b0704f8\n" +
    4. " | state=R schedstat=( 1334329099 1244244853 1694 ) utm=36 stm=96 core=1 HZ=100\n" +
    5. " | stack=0x7fd3546000-0x7fd3548000 stackSize=8188KB\n" +
    6. " | held mutexes= \"mutator lock\"(shared held)\n" +
    7. " at android.view.View.getForeground(View.java:24303)\n" +
    8. " at com.android.internal.policy.DecorView.onApplyWindowInsets(DecorView.java:1063)\n" +
    9. " at android.view.View.dispatchApplyWindowInsets(View.java:11509)\n" +
    10. " at android.view.ViewGroup.dispatchApplyWindowInsets(ViewGroup.java:7343)\n" +
    11. " at android.view.ViewRootImpl.dispatchApplyInsets(ViewRootImpl.java:2522)\n" +
    12. " at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2677)";

    提取方法:

    1. String result = anrMain;
    2. String word = "| held mutexes=";
    3. String lineFeed = "\n";
    4. int index = anrMain.indexOf(word);
    5. int indexStart = anrMain.indexOf(lineFeed,index);
    6. int indexEnd = anrMain.indexOf(lineFeed,indexStart+1);
    7. if(indexEnd > indexStart){
    8. result = anrMain.substring(indexStart+1,indexEnd);
    9. }
    10. return result;

    crash

    示例1:

    1. String str = "*** *** *** *** *** *** *** *** *** *** *** *** *** *** ***\n" +
    2. "Build fingerprint: 'aptiv/kr_dhu/kr_dhu:12/SQ3A.220705.003.A1/73:userdebug/test-keys'\n" +
    3. "Revision: '0'\n" +
    4. "ABI: 'arm64'\n" +
    5. "Timestamp: 2023-09-14 23:41:24.502545308+0800\n" +
    6. "Process uptime: 0s\n" +
    7. "Cmdline: com.android.bluetooth.ext\n" +
    8. "pid: 1447, tid: 1765, name: alarm_default_c >>> com.android.bluetooth.ext <<<\n" +
    9. "uid: 1002\n" +
    10. "signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------\n" +
    11. "x0 0000000000000000 x1 00000000000006e5 x2 0000000000000006 x3 0000007bd2deefc0\n" +
    12. "x4 b400007d2de05010 x5 b400007d2de05010 x6 b400007d2de05010 x7 0000007bd2deed49\n" +
    13. "x8 00000000000000f0 x9 880901341a724563 x10 0000000000000000 x11 ffffff80fffffbdf\n" +
    14. "x12 0000000000000001 x13 b400007cfde15db0 x14 0000007bd2def074 x15 0000000034155555\n" +
    15. "x16 0000007f02f7d050 x17 0000007f02f59db0 x18 0000007bc068a000 x19 00000000000005a7\n" +
    16. "x20 00000000000006e5 x21 00000000ffffffff x22 0000000000000000 x23 b400007c7de43dd0\n" +
    17. "x24 0000007bd2df0000 x25 0000007bca55805c x26 0000000000005066 x27 0000000000002019\n" +
    18. "x28 0000000000000000 x29 0000007bd2def040\n" +
    19. "lr 0000007f02f0caa0 sp 0000007bd2deefa0 pc 0000007f02f0cacc pst 0000000000001000\n" +
    20. "backtrace:\n" +
    21. "#00 pc 000000000004facc /apex/com.android.runtime/lib64/bionic/libc.so (abort+164) (BuildId: 6bfaf10f10e5ff343703efae2f1bdbdb)\n" +
    22. "#01 pc 000000000030d134 /system/lib64/libbluetooth_zeekr.so (startup_timer_expired(void*)+216) (BuildId: f11a18baa81b946f0894e55b5d8a4eb9)\n" +
    23. "#02 pc 00000000004126f8 /system/lib64/libbluetooth_zeekr.so (alarm_ready_generic(alarm_t*, std::_1::unique_lock&)+396) (BuildId: f11a18baa81b946f0894e55b5d8a4eb9)\n" +
    24. "#03 pc 0000000000412530 /system/lib64/libbluetooth_zeekr.so (alarm_queue_ready(fixed_queue_t*, void*)+112) (BuildId: f11a18baa81b946f0894e55b5d8a4eb9)\n" +
    25. "#04 pc 0000000000416374 /system/lib64/libbluetooth_zeekr.so (internal_dequeue_ready(void*)+84) (BuildId: f11a18baa81b946f0894e55b5d8a4eb9)";

    提取:

    1. if(content.contains("Build fingerprint: ")){
    2. String strIndex = "backtrace:";
    3. String lineFeed = "\n";
    4. int index = content.indexOf(strIndex);
    5. int indexStart = content.indexOf(lineFeed,index);
    6. int indexEnd = content.indexOf(lineFeed,indexStart+1);
    7. if(indexEnd > indexStart){
    8. return content.substring(indexStart+1,indexEnd);
    9. }
    10. }

    示例2:

    1. String str = "Process: com.github.uiautomator\n" +
    2. "PID: 31209\n" +
    3. "UID: 10084\n" +
    4. "Flags: 0x38a8be46\n" +
    5. "Package: com.github.uiautomator v2003003 (2.3.3)\n" +
    6. "Foreground: Yes\n" +
    7. "Process-Runtime: 6449\n" +
    8. "Build: aptiv/kr_dhu/kr_dhu:12/SQ3A.220705.003.A1/24:userdebug/test-keys\n" +
    9. "Loading-Progress: 1.0\n" +
    10. "\n" +
    11. "java.lang.RuntimeException: Unable to start activity ComponentInfo{com.github.uiautomator/com.github.uiautomator.ToastActivity}: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@a810881 -- permission denied for window type 2038\n" +
    12. "\tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3707)\n" +
    13. "\tat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864)\n" +
    14. "\tat android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)\n" +
    15. "\tat android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\n" +
    16. "\tat android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\n" +
    17. "\tat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)\n" +
    18. "\tat android.os.Handler.dispatchMessage(Handler.java:106)\n" +
    19. "\tat android.os.Looper.loopOnce(Looper.java:201)\n" +
    20. "\tat android.os.Looper.loop(Looper.java:288)\n" +
    21. "\tat android.app.ActivityThread.main(ActivityThread.java:7870)\n" +
    22. "\tat java.lang.reflect.Method.invoke(Native Method)\n" +
    23. "\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)\n" +
    24. "\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)\n" +
    25. "Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@a810881 -- permission denied for window type 2038\n" +
    26. "\tat android.view.ViewRootImpl.setView(ViewRootImpl.java:1213)\n" +
    27. "\tat android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:400)\n" +
    28. "\tat android.view.WindowManagerImpl.addView(WindowManagerImpl.java:138)\n" +
    29. "\tat com.github.uiautomator.FloatView.show(FloatView.java:109)\n" +
    30. "\tat com.github.uiautomator.ToastActivity.onCreate(ToastActivity.java:30)\n" +
    31. "\tat android.app.Activity.performCreate(Activity.java:8057)\n" +
    32. "\tat android.app.Activity.performCreate(Activity.java:8037)\n" +
    33. "\tat android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341)\n" +
    34. "\tat androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:711)\n" +
    35. "\tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688)\n" +
    36. "\t... 12 more";

    提取:

    1. String mark1 = "java.lang.RuntimeException:";
    2. String mark2 = "Caused by:";
    3. if(content.contains(mark1) && content.contains(mark2)){
    4. StringBuilder result = new StringBuilder("");
    5. String lineFeed = "\n";
    6. int index = content.indexOf(mark1);
    7. if(index >= 0){
    8. int indexStart = content.indexOf(lineFeed,index);
    9. int indexEnd = content.indexOf(mark2,indexStart+1);
    10. if(indexEnd > indexStart){
    11. result.append(content.substring(indexStart+1,indexEnd));
    12. }
    13. }
    14. index = content.indexOf(mark2);
    15. if(index >= 0){
    16. int indexStart = content.indexOf(lineFeed,index);
    17. result.append(content.substring(indexStart+1));
    18. }
    19. return result.toString();
    20. }

    在此做个笔记

  • 相关阅读:
    成都瀚网科技:抖音提供差异化​​亮点!
    2022-08-27 学习Vue
    如何在 vue 中使用 svg symbols
    设计模式——享元模式
    昇腾910使用记录
    强化学习-学习笔记1 | 基础概念
    MySQL(十五) 索引的分类
    Flet教程之 08 AppBar工具栏基础入门(教程含源码)
    React Hooks概述及常用的React Hooks介绍
    Gson简介
  • 原文地址:https://blog.csdn.net/chuyouyinghe/article/details/133617958