47 votes

Signal fatal 11 (SIGSEGV) à 0x00000000 (code=1) - PhoneGap

Je développe actuellement des applications Android avec PhoneGap. Récemment, lorsque j'essaie de passer d'une page HTML à une autre, l'application se ferme, et dans le LogCat l'erreur suivante apparaît :

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

J'ai fait quelques recherches sur Google concernant cette erreur, et de ce que j'ai compris, elle est liée à la mémoire de l'appareil. J'ai trouvé quelques solutions, mais pas assez pour que je comprenne comment les implémenter dans PhoneGap.

Est-ce que quelqu'un ici a déjà rencontré cette erreur auparavant ? Que puis-je faire pour résoudre le problème ?

Merci :)

9 votes

Cela pourrait également être causé par plus d'un thread appelant la même méthode native sur le même objet en même temps. Voir: stackoverflow.com/a/11812665/1172181. Donc, la réponse serait de synchroniser et de s'assurer que votre code est thread-safe.

44voto

CommonsWare Points 402670

Si vous avez écrit (ou utilisez) un plugin qui utilise à son tour du code natif C/C++ via le NDK, cela peut indiquer un bug dans ce code natif.

Sinon, il s'agit d'un bug dans le firmware du périphérique ou de l'émulateur sur lequel vous effectuez des tests.

Si vous pouvez reproduire cela dans un émulateur, sur un appareil Nexus avec le ROM d'origine, ou sur une variété d'appareils de différents fabricants, il s'agit probablement d'un bug dans Android lui-même. Dans ce cas, veuillez créer un projet d'exemple capable de reproduire l'erreur et le publier avec la trace complète d'exécution sur http://b.android.com, le suivi des problèmes du système d'exploitation Android.

Si vous rencontrez ce problème uniquement sur un appareil ou un ROM tiers, il s'agit probablement d'un bug plus spécifique -- votre meilleure option est de contacter le fabricant de l'appareil ou l'éditeur de la ROM avec vos symptômes.

1 votes

Merci, tu m'as vraiment aidé. Je vais essayer d'obtenir un autre appareil pour vérifier et je mettrai à jour plus tard si nécessaire. :)

0 votes

Merci. Cela a résolu mon problème. Pourquoi Android ne fournit-il pas le message d'erreur correct ? C'est dommage.

11voto

Kevin Points 1686

J'avais exactement le même problème sur un projet sur lequel je travaillais. Il s'est avéré que je chargeais beaucoup d'images et de sons, ce qui faisait que l'application manquait de mémoire lors de l'instanciation d'une activité. Votre programme utilise-t-il beaucoup d'éléments intensifs en mémoire? Pouvez-vous réduire leur taille?

Dans mon cas, le LogCat avait une trace de pile en vert (journalisation de niveau INFO) juste avant la ligne Fatal signal 11 (SIGSEGV). La trace de pile était une OutOfMemoryException alors que l'application chargeait des éléments pour une Activité que je lançais. J'ai donc ouvert mes images (mon programme en avait beaucoup), les ai modifiées pour réduire leur taille de fichier, et j'ai réessayé. Le bug a disparu. Vous pouvez vérifier si votre sortie LogCat ressemble à la mienne pour voir si vous avez un problème similaire:

01-15 05:20:40.462: E/dalvikvm-heap(4513): Mémoire insuffisante pour une allocation de 3145744 octets.
01-15 05:20:40.462: I/dalvikvm(4513): "main" prio=5 tid=1 UTILISABLE
01-15 05:20:40.462: I/dalvikvm(4513):   | groupe="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(Méthode Native)
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.(ExplodingCharacterDrawable.java:27)

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(Méthode Native)
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(Méthode Native)
01-15 05:20:40.472: A/libc(4513): Signal fatal 11 (SIGSEGV) à 0x00000be0 (code=1), thread 4513 (.speeddraw.lite)
01-15 05:20:40.472: A/libc(4513): Signal fatal 11 (SIGSEGV) à 0x00180500 (code=1), thread 4527 (.speeddraw.lite)

1 votes

Encore une chose qui aurait pu causer le bogue pour moi: L'application a manqué de mémoire à l'intérieur d'un deuxième thread, pas le thread principal de l'interface utilisateur. Je ne sais pas si cela a aggravé la situation ou non. Je développe sur un Galaxy S3.

0 votes

De combien as-tu réduit tes images? Les miennes font seulement 720x720 (même largeur qu'un Galaxy S3). Je les ai simplement réduites de 25% et cela n'a rien changé. De toute évidence, je ne veux pas aller trop loin sinon elles auront l'air mauvaises.

0 votes

Je ne me souviens pas. Je peux vous dire que la taille actuelle de mon dossier res, qui contient toutes les images (et les sons) que j'ai utilisées et chargées, est de 709 Ko. Avant que je ne les édite, mon dossier res était de plusieurs Mo en taille. Je chargeais presque toutes ces ressources en une seule fois dans l'activité qui échouait pour moi, donc je suppose que mon S3 peut gérer environ 1 Mo chargé dans une seule activité.

5voto

unify Points 917

Le message Google Plus suivant a résolu mon problème :

En gros, le problème est lié aux marges optiques dans les fichiers à 9 patchs. Dans mon cas, j'utilisais des 9 patchs plus récents copiés du thème Holo. Ces nouveaux patchs sont invalides dans les anciennes versions d'Android comme expliqué dans le lien

0 votes

Merci, c'était exactement mon problème - je n'aurais jamais deviné que c'était la source.

0 votes

C'était mon problème. Tu es mon sauveur.

5voto

Ciclids Points 21

Vérifiez les problèmes de mémoire insuffisante dans mon cas j'ai eu cette erreur sur Samsung S3 et c'était pour gérer beaucoup d'images sur l'activité de démarrage. J'ai cherché sur Google beaucoup de réponses sans solution car je n'avais pas de EditText ou d'entrée du tout (en fait, je ne sais pas pourquoi l'erreur montre une chaîne spannable de longueur zéro..... et pas autre chose comme OutOfMemory, etc), puis je me suis rendu compte que les images classées par résolution étaient dans les mauvais dossiers et surdimensionnées, et le Heap montait dans les cieux. Bonne chance

3voto

Emmy Points 782

Assurez-vous d'avoir toutes les images des ressources sous le répertoire des assets. J'ai eu ce problème et il s'avère qu'une de mes images est manquante. Une fois que j'ai remis l'image sous le répertoire des assets, tout est rentré dans l'ordre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X