2016-05-08 9 views
7

Ich entwickle eine App mit dem HERE SDK, und alles funktioniert gut bis jetzt. Ich bekomme Fehler wie diese:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x750057 in tid 10206 (FinalizerDaemon)
oder diese:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x94789680 in tid 24605 (FinalizerDaemon)App stürzt ab (manchmal) mit Fatal Signal 11 (SIGSEGV), Code 1

und sie meine App zum Absturz zu bringen.

Es ist nicht immer die gleichen Fehler, aber sie kommen immer ganz allein in meinem Logcat, mit keinen anderen Informationen.

In meiner ganzen App verwende ich HERE Objekte und Dienste, und selbst beim Drucken des Stacktrace bekomme ich keine weiteren Informationen über die Fehler.
Ich habe gerade bemerkt, dass diese Fehler ziemlich zufällig erscheinen, aber nur wenn ich diese Objekte/Dienste benutze.

Ich benutze ein echtes Gerät, um meine App zu testen, ein Sony Xperia Z3 kompakt, also glaube ich nicht, dass es von hier kommt.

ich wirklich bin verloren, so dass, wenn jemand eine Idee hat, auch darüber, wie mehr Infos über die Fehler zu bekommen, bitte helfen

EDIT:

05-09 23:04:10.148 6770-6782/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4 in tid 6782 (FinalizerDaemon) 
05-09 23:04:10.266 30179-30179/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
05-09 23:04:10.266 30179-30179/? I/DEBUG: UUID: 5569a1b9-c913-4101-99fa-5099e2cadd48 
05-09 23:04:10.266 30179-30179/? I/DEBUG: Build fingerprint: 'Sony/D5803/D5803:5.1.1/23.4.A.1.264/2418263178:user/release-keys' 
05-09 23:04:10.266 30179-30179/? I/DEBUG: Revision: '0' 
05-09 23:04:10.266 30179-30179/? I/DEBUG: ABI: 'arm' 
05-09 23:04:10.266 30179-30179/? I/DEBUG: pid: 6770, tid: 6782, name: FinalizerDaemon >>> com.david.metroz <<< 
05-09 23:04:10.266 30179-30179/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x4 
05-09 23:04:10.294 30179-30179/? I/DEBUG:  r0 98327400 r1 00000000 r2 00000002 r3 00000000 
05-09 23:04:10.294 30179-30179/? I/DEBUG:  r4 aec264c0 r5 b3df7acc r6 98327400 r7 73652348 
05-09 23:04:10.294 30179-30179/? I/DEBUG:  r8 6f9983a8 r9 b482a800 sl 12f1d820 fp b3df7abc 
05-09 23:04:10.294 30179-30179/? I/DEBUG:  ip b5303950 sp b3df7ab0 lr b510717f pc a0b7205c cpsr a00e0010 
05-09 23:04:10.294 30179-30179/? I/DEBUG:  #00 pc 000f405c /data/app/com.david.metroz-1/lib/arm/libMAPSJNI.so (Java_com_nokia_maps_GeoBoundingBoxImpl_destroyNative+76) 
05-09 23:04:10.294 30179-30179/? I/DEBUG:  #01 pc 001d7d4f /data/dalvik-cache/arm/[email protected]@[email protected]@classes.dex 
05-09 23:04:12.302 862-1274/? E/NativeCrashListener: Exception dealing with report 
                android.system.ErrnoException: read failed: EAGAIN (Try again) 
                 at libcore.io.Posix.readBytes(Native Method) 
                 at libcore.io.Posix.read(Posix.java:165) 
                 at libcore.io.BlockGuardOs.read(BlockGuardOs.java:230) 
                 at android.system.Os.read(Os.java:350) 
                 at com.android.server.am.NativeCrashListener.consumeNativeCrashData(NativeCrashListener.java:240) 
                 at com.android.server.am.NativeCrashListener.run(NativeCrashListener.java:138) 

EDIT 2: Ich bin jetzt bin ich mir ziemlich sicher, dass der Absturz passiert, wenn ich HERE-Objekte mit gson aus der Datenbank abrufe.

Der folgende Code funktioniert, wenn alles in der gleichen App Laufzeit geschehen ist, aber wenn ich eine Zeichenfolge in der Datenbank zu speichern, schließen Sie die App und dann wieder öffnen, erhalte ich die Fatal signal während der json string zurück zum Objekt konvertieren .

// to insert I create a json string and then insert it in the database 
String mGbSortie = gson.toJson(geoboundinBox); 

//and then to retrieve the data : 
Type gbType = new TypeToken<GeoBoundingBox>(){}.getType(); 
geoBoudingBox = gson.fromJson(stringFromDb, listType) 

Ich weiß wirklich nicht, warum es ..

+0

jetzt habe ich das gleiche Problem. Ich habe eine App und zufällig wechselnde Fragmente. Es zeigt mir den gleichen Fehler beim App-Absturz, aber es ist sehr zufälliges Verhalten bedeutet, dass es kein Muster dafür gibt. aber es wird abgestürzt –

Antwort

0

Können Sie funktioniert nicht fügen mehr Informationen von adb logcat? Es ist derzeit nicht genug Informationen für uns, um Ihnen zu helfen. Ein Segfault im Finalizer-Daemon kann das doppelte Löschen nativer Objekte implizieren. Ohne weitere Informationen könnte es irgendwo im Betriebssystem oder im SDK sein.

Die übersprungenen Frames bedeuten, dass Ihre App viele Daten im Hauptthread verarbeitet. Das Überspringen von 161 Frames bedeutet mehr als 3s hektische Zeit! Versuchen Sie, AsyncTasks oder Threads zu verwenden, um Ihre App zu optimieren.

Es scheint, dass Sie GSON-Typ Deserializer verwenden, die unsere nativen Objekte nicht ordnungsgemäß erstellen. Manuelles Deserialisieren der Lat, lng und Aufrufen neuer GeoBoundingBox() wird nicht abstürzen.

+0

Ich habe meine Frage bearbeitet, aber ich denke, ich habe das Problem gefunden: Ich benutze die Gson-Bibliothek, um eine Liste von Geokoordinaten und eine Geoboundingbox in eine JSON-Zeichenfolge zu konvertieren, und ich denke, manchmal ist die Zeichenfolge nicht gut erstellt, Also versucht man, das Objekt mit der falschen Zeichenfolge zurück zu bekommen, ein bisschen wie [dies] (http://stackoverflow.com/a/31866823/5921902) –

+0

Das ist eine Möglichkeit, aber nur eine schnelle Überprüfung des Codes Ich sehe nicht, wie Sie einen ungültigen Zeiger mit diesem Stapel haben würden. Können Sie die Koordinaten der Begrenzungsbox, die abstürzt, veröffentlichen? –

+1

Nun es stürzt mit jeder Koordinaten, die ich versuche, aber Sie können einen Blick auf sie, wenn Sie wollen: 'gb: rechts = Lat: 48.86490904039134, Long: 2.39895392405874, Alt: 0.0 left = Lat: 48.864913, Long: 2.3988175, Alt : 0.0 center = Breite: 48.86491102019567, Länge: 2.3988857120293696, Alt: 1.073741824E9'. –

4

1) Stellen Sie zunächst fest, ob es sich um einen Fehler im Android, den Drittanbieterbibliotheken oder Ihrem Gerät handelt, damit Sie wissen, wie Sie vorgehen sollen.

This answer gibt eine Lösung, wie dies zu tun:

Wenn Sie geschrieben haben (oder verwenden) ein Plugin, das native C/C++ Code über das NDK wiederum verwendet, das einen Fehler hinweisen kann in dieser native Code.

Andernfalls ist dies ein Fehler in der Firmware des Geräts oder Emulators, auf dem Sie testen.

Wenn Sie dies in einem Emulator, auf einem Nexus-Gerät mit dem Original-ROM oder auf einer Vielzahl von Geräten verschiedener Hersteller reproduzieren können, ist es wahrscheinlich ein Fehler in Android selbst. Erstellen Sie in diesem Fall ein Beispielprojekt, das den Fehler reproduzieren kann, und senden Sie es zusammen mit der gesamten Stapelüberwachung an http://b.android.com, dem Android OS-Problemverfolger.

Wenn Sie dies nur auf einem Gerät oder einem Drittanbieter-ROM feststellen, handelt es sich wahrscheinlich um einen spezifischeren Fehler. Am besten wenden Sie sich an den Gerätehersteller oder ROM-Herausgeber mit Ihren Symptomen.

Es sind diese beiden Fragen, die den Fehler diskutieren Sie im Detail erhalten:

Android Fatal signal 11 (SIGSEGV) at 0x636f7d89 (code=1). How can it be tracked down?

Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1) - PhoneGap

2) In Bezug auf Ihre geobounds Werte Parsen (wie es scheinen würde, ist wo das Problem liegen könnte), stellen Sie sicher, dass Sie Ihre Analyse zwischen Gson und Json korrekt mit den richtigen Geobound-Werten durchführen. Es scheint, dass die Speicherung der Werte nicht im Einklang mit der Art und Weise steht, wie Sie sie retrei- fen.

From Mykong:

toJson() - Wandelt Java-Objekt JSON

Gson gson = new Gson(); 
Staff obj = new Staff(); 

// 1. Java object to JSON, and save into a file 
gson.toJson(obj, new FileWriter("D:\\file.json")); 

// 2. Java object to JSON, and assign to a String 
String jsonInString = gson.toJson(obj); 

fromJson() - Wandelt JSON Java-Objekt

Gson gson = new Gson(); 

// 1. JSON to Java object, read it from a file. 
Staff staff = gson.fromJson(new FileReader("D:\\file.json"), Staff.class); 

// 2. JSON to Java object, read it from a Json String. 
String jsonInString = "{'name' : 'mkyong'}"; 
Staff staff = gson.fromJson(jsonInString, Staff.class); 

// JSON to JsonElement, convert to String later. 
JsonElement json = gson.fromJson(new FileReader("D:\\file.json"), JsonElement.class); 
String result = gson.toJson(json); 

Von this answer:

public class YourObject { 
    private String appname; 
    private String Version; 
    private String UUID; 
    private String WWXY; 
    private String ABCD; 
    private String YUDE; 
    //getters/setters 


YourObject parsed = new Gson().fromJson(jsons, YourObject.class); 

String jsons = "{'appname':'application', 'Version':'0.1.0', 'UUID':'300V', 'WWXY':'310W', 'ABCD':'270B', 'YUDE':'280T'}"; 
YourObject parsed = new Gson().fromJson(jsons, YourObject.class); 

JsonObject object = new JsonParser().parse(jsons).getAsJsonObject(); 
object.get("appname"); // application 
object.get("Version"); // 0.1.0 

Diese so geben Fragen mehr Details:
How to parse json parsing Using GSON in android
parse JSON with gson and GsonBuilder()

3) Stellen Sie sicher, Sie die richtigen Werte für Ihre geobound Co-ords sind vorbei. Diese Frage Value does not fall within the expected range GeoboundingBox WinRT (obwohl es C# gibt ein gutes Beispiel dafür, wie zu brechen, die Komponenten von Informationen, die Sie versuchen, zu speichern und abzurufen.

The answer ist unkompliziert.

var nw = new BasicGeoposition(); 
nw.Latitude = Max(pos.Coordinate.Latitude, pos2.lat); 
nw.Longitude = Min(pos.Coordinate.Longitude, pos2.lng); 
var se = new BasicGeoposition(); 
se.Latitude = Min(pos.Coordinate.Latitude, pos2.lat); 
se.Longitude = Max(pos.Coordinate.Longitude, pos2.lng); 

ist und lernen, wie Sie Ihre json mit Gson analysieren:

Use Gson to work with JSON in your Android apps

Es gibt auch this gihub repo für Sie für weitere Ideen zu suchen.

0

Ich habe dasselbe Problem gelöst, indem ich den Code befolge.

android:vmSafeMode="true" in Anwendung Tag in Manifest Datei hinzufügen.

Ihre Bewerbung Tag sollte wie folgt aussieht:

<application 
    android:name=".MyApplication" 
    android:hardwareAccelerated="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:largeHeap="true" 
    android:theme="@style/AppTheme" 
    android:vmSafeMode="true"> 

    // Other stuff 

</application> 

Hope this Ihnen helfen.

+0

Ich weiß nicht wie, aber das vermeidet das Fatal-Signal, aber wie @DavidLeong sagte ich Serialisierung eines C++ - Pointer, so wenn ich geschlossen und öffnete die App wieder, der Zeiger war null. Ich kann es jetzt besser sehen, denn anstatt den Fehler zu bekommen, bekomme ich das Objekt mit Nullkoordinaten: '0,000000,0,000000; 0,000000,0,000000' –

+0

@DavidSeroussi, ich hoffe, dass Ihr Problem gelöst ist. –

+0

Ich würde nicht empfehlen, dies zu tun. Es kann das Problem verbergen und letztendlich den C++ - Heap verderben. –

Verwandte Themen