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

anr

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

提取方法:

        String result = anrMain;
        String word = "| held mutexes=";
        String lineFeed = "\n";
        int index = anrMain.indexOf(word);
        int indexStart = anrMain.indexOf(lineFeed,index);
        int indexEnd = anrMain.indexOf(lineFeed,indexStart+1);
        if(indexEnd > indexStart){
            result = anrMain.substring(indexStart+1,indexEnd);
        }
        return result;

crash

示例1:

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

提取:

if(content.contains("Build fingerprint: ")){
            String strIndex = "backtrace:";
            String lineFeed = "\n";
            int index = content.indexOf(strIndex);
            int indexStart = content.indexOf(lineFeed,index);
            int indexEnd = content.indexOf(lineFeed,indexStart+1);
            if(indexEnd > indexStart){
                return content.substring(indexStart+1,indexEnd);
            }
        }

示例2:

String str = "Process: com.github.uiautomator\n" +
                "PID: 31209\n" +
                "UID: 10084\n" +
                "Flags: 0x38a8be46\n" +
                "Package: com.github.uiautomator v2003003 (2.3.3)\n" +
                "Foreground: Yes\n" +
                "Process-Runtime: 6449\n" +
                "Build: aptiv/kr_dhu/kr_dhu:12/SQ3A.220705.003.A1/24:userdebug/test-keys\n" +
                "Loading-Progress: 1.0\n" +
                "\n" +
                "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" +
                "\tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3707)\n" +
                "\tat android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3864)\n" +
                "\tat android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)\n" +
                "\tat android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\n" +
                "\tat android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\n" +
                "\tat android.app.ActivityThread$H.handleMessage(ActivityThread.java:2253)\n" +
                "\tat android.os.Handler.dispatchMessage(Handler.java:106)\n" +
                "\tat android.os.Looper.loopOnce(Looper.java:201)\n" +
                "\tat android.os.Looper.loop(Looper.java:288)\n" +
                "\tat android.app.ActivityThread.main(ActivityThread.java:7870)\n" +
                "\tat java.lang.reflect.Method.invoke(Native Method)\n" +
                "\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)\n" +
                "\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)\n" +
                "Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@a810881 -- permission denied for window type 2038\n" +
                "\tat android.view.ViewRootImpl.setView(ViewRootImpl.java:1213)\n" +
                "\tat android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:400)\n" +
                "\tat android.view.WindowManagerImpl.addView(WindowManagerImpl.java:138)\n" +
                "\tat com.github.uiautomator.FloatView.show(FloatView.java:109)\n" +
                "\tat com.github.uiautomator.ToastActivity.onCreate(ToastActivity.java:30)\n" +
                "\tat android.app.Activity.performCreate(Activity.java:8057)\n" +
                "\tat android.app.Activity.performCreate(Activity.java:8037)\n" +
                "\tat android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341)\n" +
                "\tat androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate(MonitoringInstrumentation.java:711)\n" +
                "\tat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3688)\n" +
                "\t... 12 more";

提取:

        String mark1 = "java.lang.RuntimeException:";
        String mark2 = "Caused by:";
        if(content.contains(mark1) && content.contains(mark2)){
            StringBuilder result = new StringBuilder("");
            String lineFeed = "\n";

            int index = content.indexOf(mark1);
            if(index >= 0){
                int indexStart = content.indexOf(lineFeed,index);
                int indexEnd = content.indexOf(mark2,indexStart+1);
                if(indexEnd > indexStart){
                    result.append(content.substring(indexStart+1,indexEnd));
                }
            }

            index = content.indexOf(mark2);
            if(index >= 0){
                int indexStart = content.indexOf(lineFeed,index);
                result.append(content.substring(indexStart+1));
            }

            return result.toString();
         }

在此做个笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值