看到本机崩溃 ("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 才能解决此问题。