-
Notifications
You must be signed in to change notification settings - Fork 307
为什么crash没上报
经常有同学反馈,为什么接入了bugly但是crash却没有上报,bugly后台看不到crash呢?如果你现在遇到这个问题请参考以下步骤:
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相关的日志。
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]
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没有上报。
<1>bugly接入未成功。在接入bugly之前请参考官网文档和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上报失败。