致命信号 11 (SIGSEGV) 在 0x00000000 (code=1) - PhoneGap

Posted

技术标签:

【中文标题】致命信号 11 (SIGSEGV) 在 0x00000000 (code=1) - PhoneGap【英文标题】:Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1) - PhoneGap 【发布时间】:2012-12-10 23:46:32 【问题描述】:

我现在使用 PhoneGap 开发 android 应用程序。 最近,当我尝试在 html 页面之间切换时,应用程序关闭,并且在 LogCat 中出现以下错误:

12-24 15:43:39.237: A/libc(23631): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 23631 (.example.app)

我在谷歌上搜索了一下这个错误,我的理解是它与设备的内存有关。我找到了一些解决方案,但并没有意识到我是如何在 PhoneGap 中实现它们的。

这里有人遇到过这个错误吗? 我能做些什么来解决这个问题?

谢谢你:)

【问题讨论】:

这也可能是由多个线程同时在同一个对象上调用同一个本地方法引起的。请参阅:***.com/a/11812665/1172181。因此,答案是同步并确保您的代码是线程安全的。 【参考方案1】:

如果您编写(或正在使用)一个插件,该插件又通过 NDK 使用本机 C/C++ 代码,这可能表明该本机代码中存在错误。

否则,这是您正在测试的设备或模拟器的固件中的错误。

如果您可以在模拟器、具有原始 ROM 的 Nexus 设备或来自不同制造商的各种设备上重现此问题,则可能是 Android 本身的错误。在这种情况下,请创建一个可以重现错误的示例项目,并将其与整个堆栈跟踪一起发布到 Android 操作系统问题跟踪器 http://b.android.com。

如果您只在一台设备或一个第三方 ROM 上遇到此问题,这可能是一个更具体的错误 - 您最好联系设备制造商或 ROM 发行商并告知您的症状。

【讨论】:

谢谢你,你帮了我很多。我会尝试让另一台设备检查他,如有必要,我会稍后更新。 :) 谢谢。这解决了我的问题。为什么android不提供正确的错误信息?太糟糕了。【参考方案2】:

我在 xhdpi Nexus 7 上遇到了类似的错误,但在我的旧手机上一切正常。我在更新带有很多小按钮的大型 GridView 时出现了问题。

A/libc(7410): Fatal signal 11 (SIGSEGV) at 0xbe8a8000 (code=1), thread 7410

我认为这不是您的问题,因为您的 PC 为 0,而我的 PC 为 0xbe8a8000,但它很容易尝试并且解决了我的问题,所以我将发布它以防其他人来这里寻找 SEGV解决方案。 在https://github.com/MasDennis/Rajawali/issues/313 上有一个关于类似问题的讨论,有人提到他们有同样的问题,关闭硬件加速为他们解决了这个问题。这很容易尝试,它解决了我的问题。 在 Android 清单应用程序中添加:

android:hardwareAccelerated="false"

希望这对其他人有所帮助...

【讨论】:

是的,谢谢,在模拟器中这就是原因。将 hardwareAccelerated 设置为 false,它不再崩溃,但现在我得到:“eglMakeCurrent(917): error 0x3001 (EGL_NOT_INITIALIZED)” @steven smith 我正在使用 android:hardwareAccelerated="false",但我的问题仍未解决,我的应用程序仍然崩溃。您是否有任何其他想法来解决此错误“致命信号 11 (SIGSEGV),代码 1,tid 21028 (lfontpro.source) 中的故障地址 0xa5156d60”。谢谢【参考方案3】:

我刚刚在我正在进行的一个项目中遇到了同样的问题。事实证明,我在尝试实例化 Activity 时加载了大量图像和声音,导致应用程序内存不足。您的程序是否使用大量内存密集型资产?你能完全减小它们的尺寸吗?

在我的例子中,LogCat 在Fatal signal 11 (SIGSEGV) 行之前有一个绿色的堆栈跟踪(INFO 级日志记录)。堆栈跟踪是OutOfMemoryException,而应用程序正在为我正在启动的Activity 加载资产。所以我拉起我的drawables(我的程序有很多),编辑它们以减小它们的文件大小,然后再试一次。虫子消失了。你可以看看你的 LogCat 输出是否和我的一样,看看你是否有类似的问题:

01-15 05:20:40.462: E/dalvikvm-heap(4513): Out of memory on a 3145744-byte allocation.
01-15 05:20:40.462: I/dalvikvm(4513): "main" prio=5 tid=1 RUNNABLE
01-15 05:20:40.462: I/dalvikvm(4513):   | group="main" sCount=0 dsCount=0 obj=0x4158b6a0 self=0x41001a60
01-15 05:20:40.462: I/dalvikvm(4513):   | sysTid=4513 nice=0 sched=0/0 cgrp=apps handle=1074673744
01-15 05:20:40.462: I/dalvikvm(4513):   | schedstat=( 0 0 0 ) utm=41 stm=20 core=1
01-15 05:20:40.462: I/dalvikvm(4513):   at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
01-15 05:20:40.462: I/dalvikvm(4513):   at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:592)
01-15 05:20:40.462: I/dalvikvm(4513):   at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
01-15 05:20:40.462: I/dalvikvm(4513):   at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781)
01-15 05:20:40.462: I/dalvikvm(4513):   at android.content.res.Resources.loadDrawable(Resources.java:1963)
01-15 05:20:40.462: I/dalvikvm(4513):   at android.content.res.Resources.getDrawable(Resources.java:672)
01-15 05:20:40.462: I/dalvikvm(4513):   at com.kbi.speeddraw.lite.game.drawables.character.ExplodingCharacterDrawable.<init>(ExplodingCharacterDrawable.java:27)
<!-- snip -->
01-15 05:20:40.462: I/dalvikvm(4513):   at com.kbi.gameengine.api.gameactivity.GameActivity.onCreate(GameActivity.java:80)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.app.Activity.performCreate(Activity.java:5048)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.app.ActivityThread.access$700(ActivityThread.java:139)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.os.Handler.dispatchMessage(Handler.java:99)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.os.Looper.loop(Looper.java:137)
01-15 05:20:40.472: I/dalvikvm(4513):   at android.app.ActivityThread.main(ActivityThread.java:4918)
01-15 05:20:40.472: I/dalvikvm(4513):   at java.lang.reflect.Method.invokeNative(Native Method)
01-15 05:20:40.472: I/dalvikvm(4513):   at java.lang.reflect.Method.invoke(Method.java:511)
01-15 05:20:40.472: I/dalvikvm(4513):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
01-15 05:20:40.472: I/dalvikvm(4513):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
01-15 05:20:40.472: I/dalvikvm(4513):   at dalvik.system.NativeStart.main(Native Method)
01-15 05:20:40.472: A/libc(4513): Fatal signal 11 (SIGSEGV) at 0x00000be0 (code=1), thread 4513 (.speeddraw.lite)
01-15 05:20:40.472: A/libc(4513): Fatal signal 11 (SIGSEGV) at 0x00180500 (code=1), thread 4527 (.speeddraw.lite)

【讨论】:

对我来说可能导致该错误的另一件事是:该应用程序在第二个线程内耗尽了内存,而不是主 UI 线程。我不知道这是否会使情况恶化。我正在 Galaxy S3 上开发。 您将图片缩小了多少?我的只有 720x720(与 Galaxy S3 的宽度相同)。我只是将它们减少了 25%,但并没有什么不同。显然我不想走得太远,否则他们会开始看起来很糟糕。 我不记得了。我可以告诉你,我的res 文件夹的当前大小是 709 KB,其中包含我使用和加载的所有图像(和声音)。在我编辑它们之前,我的 res 文件夹有几 MB 大小。我在对我来说失败的活动中一次加载几乎所有这些资源,所以我猜我的 S3 可以处理大约 1 MB 在单个活动中加载。 哇,谢谢。那么你会说我们在最终应用程序中明显更差的图像质量吗?我将我的尺寸缩小到崩溃停止的大小,但图像现在比我想要的要小。 我没有那么多资产,所以我能够保持它们相当大。我的大部分资产目前大小为 10-100 KB,我没有注意到质量下降。也就是说,我的应用使用了一种已经“风格糟糕”的艺术风格,因此它们可能会有一些不明显的退化,因为它不应该看起来很精致。【参考方案4】:

以下 Google Plus 帖子解决了我的问题:

问题基本上与 9 个补丁文件中的光学界限有关。就我而言,我使用的是从 Holo Theme 复制的较新的 9patches。如link中所述,此新补丁在旧版本的android中无效

【讨论】:

谢谢,这正是我的问题 - 我永远不会猜到这是源头。 这是我的问题。你是一个救生员。【参考方案5】:

在我的情况下检查 OutofMemory 问题我在三星 S3 上收到此错误,并且用于在启动 Activity 时管理大量图像。我搜索了很多没有解决方案的回复,因为我根本没有 EditText 或输入(实际上,我不知道为什么错误 show the spannable string zero lenght.... .而不是像OutOfMemory等其他东西),然后我意识到按分辨率排序的图像位于错误的文件夹中并且尺寸过大,并且堆在天空中。 祝你好运

【讨论】:

【参考方案6】:

确保您拥有 assets 目录下的所有资源图像。我遇到了这个问题,结果发现我的一张图片丢失了。一旦我将图像放回资产目录下,一切都很好。

【讨论】:

【参考方案7】:

使用这个... options.headers = "连接":"关闭" ;

【讨论】:

【参考方案8】:

以下内容帮助我摆脱了 webview 中的错误:

webView.freeMemory();

webView.clearCache(true);

第二个选项会降低您的应用速度。

【讨论】:

【参考方案9】:

对我来说,问题在于 chrome webview。我禁用 chrome 并启用 Android webview。对我来说效果很好。

【讨论】:

以上是关于致命信号 11 (SIGSEGV) 在 0x00000000 (code=1) - PhoneGap的主要内容,如果未能解决你的问题,请参考以下文章

致命信号 11 (SIGSEGV) 在 0x00000000 (code=1) - PhoneGap

使用 mixChannels 函数 (opencv) 时的“致命信号 11 (SIGSEGV),代码 1”

Android、CMDTool、stdout 重定向、“致命信号 11 (SIGSEGV)”

MobileAds.initialize(this) 崩溃 致命信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)

应用随机崩溃与致命信号7(SIGBUS),代码2或致命信号11(SIGSEGV),代码1

Renderscript 致命信号 11 (SIGSEGV) 代码 1 (SEGV_MAPERR) 故障地址