看到本机崩溃 ("memory violation", sig=11) 而不是 Android 堆栈跟踪
Seeing native crash ("memory violation", sig=11) instead of Android stack trace
我最近开始在我的应用程序中看到更多本机崩溃,在这些情况下,我似乎应该看到托管崩溃和 Android 堆栈跟踪。本机崩溃时,应用程序会立即关闭,而不会出现 "Unfortunately your_app_name has stopped" 框。而不是 logcat 中漂亮的 Android 堆栈跟踪,我看到的是这样的:
04-01 16:07:53.165 1263-1263/? E/audit: type=1701 msg=audit(1459544873.165:4214): auid=4294967295 uid=10535 gid=10535 ses=4294967295 subj=u:r:untrusted_app:s0 pid=2372 comm="app.debug" reason="memory violation" sig=11
为了对此进行测试,我特意在 OnClickListener 的 onClick() 方法中使用以下代码生成了 NullPointerException:
Log.v("debugtag", "" + ((String)null).length());
我确信这会导致 Android 堆栈跟踪,但我只看到了与本机崩溃相关的输出。显然有什么东西干扰了异常处理。
我注意到在升级到 Flurry 6.3.0 后开始出现这种情况。还有其他人看到过这种情况吗?
我降级到 Flurry 6.2.0,这个问题就消失了。正如预期的那样,我现在看到了完整的 Android 堆栈跟踪,而不是本机崩溃。
在使用 Flurry 6.3.0 调试应用程序时,我注意到我有时会在本机崩溃之前以 Flurry 的 uncaughtException() 方法结束。反编译的 Flurry 代码显然被混淆了。在 class "ma" 中有一个私有内部 class "a" 实现了 UncaughtExceptionHandler。在内部 class "a" 的 uncaughtException() 方法中,这是我看到的前四行代码:
ma var3 = ma.this;
Throwable var8 = var2;
Thread var7 = var1;
Set var9 = var3.c();
在执行最后一行代码时,调试会话结束,本机崩溃。
我已将此情况报告给Flurry。我还不知道这是否是我的应用程序所特有的,或者这是否是 Flurry 的问题。当有更多信息可用时,我会在这里更新。
我确实尝试在调用FlurryAgent.init()之前调用FlurryAgent.setCaptureUncaughtExceptions(false)
,但本机崩溃仍然发生。
更新:Flurry 报告了在其 6.3.1 版本中修复的问题。根据他们的 release notes,6.3.0 中引入的问题仅影响调试版本 -- 不影响发布版本。
这里也一样。必须降级到 6.2.0 才能解决此问题。
我最近开始在我的应用程序中看到更多本机崩溃,在这些情况下,我似乎应该看到托管崩溃和 Android 堆栈跟踪。本机崩溃时,应用程序会立即关闭,而不会出现 "Unfortunately your_app_name has stopped" 框。而不是 logcat 中漂亮的 Android 堆栈跟踪,我看到的是这样的:
04-01 16:07:53.165 1263-1263/? E/audit: type=1701 msg=audit(1459544873.165:4214): auid=4294967295 uid=10535 gid=10535 ses=4294967295 subj=u:r:untrusted_app:s0 pid=2372 comm="app.debug" reason="memory violation" sig=11
为了对此进行测试,我特意在 OnClickListener 的 onClick() 方法中使用以下代码生成了 NullPointerException:
Log.v("debugtag", "" + ((String)null).length());
我确信这会导致 Android 堆栈跟踪,但我只看到了与本机崩溃相关的输出。显然有什么东西干扰了异常处理。
我注意到在升级到 Flurry 6.3.0 后开始出现这种情况。还有其他人看到过这种情况吗?
我降级到 Flurry 6.2.0,这个问题就消失了。正如预期的那样,我现在看到了完整的 Android 堆栈跟踪,而不是本机崩溃。
在使用 Flurry 6.3.0 调试应用程序时,我注意到我有时会在本机崩溃之前以 Flurry 的 uncaughtException() 方法结束。反编译的 Flurry 代码显然被混淆了。在 class "ma" 中有一个私有内部 class "a" 实现了 UncaughtExceptionHandler。在内部 class "a" 的 uncaughtException() 方法中,这是我看到的前四行代码:
ma var3 = ma.this;
Throwable var8 = var2;
Thread var7 = var1;
Set var9 = var3.c();
在执行最后一行代码时,调试会话结束,本机崩溃。
我已将此情况报告给Flurry。我还不知道这是否是我的应用程序所特有的,或者这是否是 Flurry 的问题。当有更多信息可用时,我会在这里更新。
我确实尝试在调用FlurryAgent.init()之前调用FlurryAgent.setCaptureUncaughtExceptions(false)
,但本机崩溃仍然发生。
更新:Flurry 报告了在其 6.3.1 版本中修复的问题。根据他们的 release notes,6.3.0 中引入的问题仅影响调试版本 -- 不影响发布版本。
这里也一样。必须降级到 6.2.0 才能解决此问题。