Skip to content

为什么crash没上报

rocky edited this page May 31, 2019 · 8 revisions

经常有同学反馈,为什么接入了bugly但是crash却没有上报,bugly后台看不到crash呢?如果你现在遇到这个问题请参考以下步骤:

1.确保打开了bugly debug开关,这样才能看到bugly日志,有了日志才能进行后续动作。

android sdk 如何打开debug https://bugly.qq.com/docs/user-guide/instruction-manual-android/?v=20181014122344

unity 如何打开debug https://bugly.qq.com/docs/user-guide/instruction-manual-plugin-unity/?v=20180709165613

如果打开了debug可以看到bugly初始化、crash发生过程的logcat日志。TAG为"crashreport",比如logcat -s CrashReport可以过滤出bugly相关的日志。

2.有了日志,从哪里可以看到crash是否上报了呢?请本地模拟一个crash,然后查看crash发生过程logcat日志。一个crash发生后正常的日志应该包括如下信息

<1>crash捕获日志,以nativecrash为例对应日志格式如下:

04-28 07:21:55.354 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: #++++++++++Record By Bugly++++++++++#
04-28 07:21:55.354 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # You can use Bugly(http:\\bugly.qq.com) to get more Crash Detail!
04-28 07:21:55.354 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # PKG NAME: com.example.rockypzhang.buglydemo
04-28 07:21:55.354 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # APP VER: 1.2
04-28 07:21:55.354 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # LAUNCH TIME: 2019-04-28 07:14:17
04-28 07:21:55.354 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # CRASH TYPE: NATIVE_CRASH
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # CRASH TIME: 2019-04-28 07:21:55
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # CRASH PROCESS: com.example.rockypzhang.buglydemo
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # CRASH THREAD: main(1)
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # REPORT ID: a1d33081-2970-46d4-8120-e0fac169b1f7
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # CRASH DEVICE: Android SDK built for x86 ROOTED
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # RUNTIME AVAIL RAM:1255100416 ROM:71008256 SD:532822016
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # RUNTIME TOTAL RAM:1588793344 ROM:817143808 SD:534761472
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # EXCEPTION FIRED BY KERNEL UNKNOWN
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: # CRASH STACK: 
04-28 07:21:55.356 3916-4011/com.example.rockypzhang.buglydemo E/CrashReport: SIGSEGV(SEGV_MAPERR)
    0x0
    #00    pc 00007ecb    /data/app/com.example.rockypzhang.buglydemo-2/lib/x86/libnative-lib.so (Java_com_example_rockypzhang_buglydemo_NativeCrashJni_createNativeCrash+27) [x86::087e88d2df905a5a673f1713df9f77b8]
    #01    pc 003b86cf    /data/dalvik-cache/x86/data@app@com.example.rockypzhang.buglydemo-2@base.apk@classes.dex (oatdata+3897039) [x86::d1a9f0b0b86687bd1ac53854ac554df6]

<2> crash上报信息,关键日志格式如下:

04-28 07:21:55.379 3916-4011/com.example.rockypzhang.buglydemo I/CrashReport: try to upload right now
04-28 07:21:55.415 3916-4012/com.example.rockypzhang.buglydemo D/CrashReport: [Upload] Upload to http://android.bugly.qq.com/rqd/async?aid=31ceafc7-e3e5-4266-a721-3d2233566dc0 with cmd 830 (pid=3916 | tid=4012).
[Upload] Success: crash

如果没有看到这些日志,说明本次发生的crash没有上报。

3.经过步骤1和2可以确认一个crash发生后是否被bugly捕获,捕获后是否成功上传。如果发现没有捕获或者捕获了但是没上传该如何处理呢?经过大量用户反馈总结原因主要有:

<1>bugly接入未成功。在接入bugly之前请参考官网文档和DEMO完整运行一遍。

官网文档

DEMO

<2>java crash发生后无法上报,但是native crash可以上报。具体案例分析参考

答:bugly sdk对java crash的捕获是通过实现UncaughtExceptionHandler接口,请检查app内部还有哪些地方实现了UncaughtExceptionHandler,实现的地方是否在处理完毕之后将消息抛给下一个消费者比如bugly,如果没有的话那么很可能bugly没有捕获到堆栈。修改建议是APP初始化的时候将Bugly初始化放到其他sdk或者实现UncaughtExceptionHandler接口的代码后面,避免bugly实现的逻辑被覆盖。

<3>我的APP是多进程,发现有些进程的crash发生后没有及时上报。

答:请检查bugly初始化是否设置了仅主进程为上报进程,如果用户希望所有进程发生的crash都可以实时上报,请将所有的进程都设置为上报进程。如果用户没有主动设置,初始化的时候默认为true。

<4>app crash后从本地日志看bugly已经捕获了,但是没有成功上传,也看不到上报的日志信息。每次日志走到这里便结束了

04-25 16:47:35.462: I/CrashReport(10414): [crash callback] start user's callback:onCrashHandleStart()
04-25 16:47:35.462: D/CrashReport(10414): Calling 'onCrashHandleStart' of Bugly crash listener.
04-25 16:47:35.462: I/CrashReport(10414): [crash callback] start user's callback:onCrashHandleStart2GetExtraDatas()
04-25 16:47:35.462: D/CrashReport(10414): Calling 'onCrashHandleStart2GetExtraDatas' of Bugly crash listener.

答:请检查Bugly初始化是否设置了

UserStrategy strategy = new UserStrategy(appContext);
strategy.setCrashHandleCallback(new CrashReport.CrashHandleCallback() {
    public Map<String, String> onCrashHandleStart(int crashType, String errorType, 
            String errorMessage, String errorStack) {
        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
        map.put("Key", "Value");
        return map;
    }

    @Override
    public byte[] onCrashHandleStart2GetExtraDatas(int crashType, String errorType, 
            String errorMessage, String errorStack) {
        try {
            return "Extra data.".getBytes("UTF-8");
        } catch (Exception e) {
            return null;
        }
    }

});

请注意,crash发生后在上报之前会回调这里,用于设置用户自定义数据,请确保这两个方法不会耗时很久,如果发生阻塞会引起bugly上报失败。

Clone this wiki locally