2016-05-08 1 views
7

Я разрабатываю приложение с помощью ЗДЕСЬ sdk, и все работает до сих пор. Я получаю ошибки, как это:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x750057 in tid 10206 (FinalizerDaemon)
или это один:
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x94789680 in tid 24605 (FinalizerDaemon)Случае сбоя приложения (иногда) с фатальным сигналом 11 (SIGSEGV), код 1

и они делают мой крах приложения.

Это не всегда те же ошибки, но они всегда приходят в одиночку в моем Logcat, без какой-либо другой информации.

Во всем моем приложении я использую объекты и службы ЗДЕСЬ, и даже при печати stacktrace я не получаю больше информации об ошибках.
Я только заметил, что эти ошибки появляются в значительной степени случайным образом, но только тогда, когда я использую эти объекты/службы.

Я использую настоящее устройство для тестирования своего приложения, Sony Xperia Z3 compact, поэтому я не думаю, что это происходит отсюда.

я действительно потерял, так что если кто-то имеют какие-либо идеи, даже о том, как получить более подробную информацию об ошибках, пожалуйста, помогите

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: Я теперь довольно уверен, что авария происходит, когда я извлекаю объекты HERE из базы данных с помощью gson.

Следующий код работает, когда все делается в том же приложении выполнения, но при сохранении строки в базе данных, закройте приложение, а затем повторно открыть его, я получаю Fatal signal при преобразовании json string обратно в объект ,

// 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) 

Я действительно не знаю, почему он не работает ..

+0

сейчас у меня такая же проблема. У меня есть приложение и случайное изменение фрагментов. он показывает мне ту же ошибку при сбое приложения, но это очень случайное поведение означает, что для этого нет шаблона. но он разбился –

ответ

0

Вы можете вставить больше информации от ADB LogCat? В настоящее время нам недостаточно информации, чтобы помочь вам. Segfault в демонере финализатора может подразумевать двойное удаление собственных объектов. Без дополнительной информации это может быть где угодно в ОС или в SDK.

Пропущенные рамки означают, что ваше приложение обрабатывает большое количество данных в основной теме. Пропуск 161 кадра означает более 3-х рабочих часов! Попробуйте использовать AsyncTasks или потоки для оптимизации вашего приложения.

Кажется, вы используете десериализатор типа GSON, который не будет правильно строить наши собственные объекты. В ручном режиме десериализация лата, lng и вызов нового GeoBoundingBox() не будут разбиты.

+0

Я отредактировал свой вопрос, но я думаю, что нашел проблему: я использую библиотеку gson для преобразования списка геокоординатов и geoboundingbox в json-строку, и я думаю, что иногда строка не очень хорошо создана, поэтому попытка вернуть объект с этой неправильной строкой испортится, немного похоже на [this] (http://stackoverflow.com/a/31866823/5921902) –

+0

Это возможность, но просто быстрая проверка кода Я не вижу, как у вас будет неправильный указатель на этот стек. Можете ли вы разместить координаты ограничивающей рамки, которая сработает? –

+1

Ну, он падает с каждой координатой, которую я пытаюсь, но вы можете взглянуть на них, если хотите: 'gb: right = Lat: 48.86490904039134, Long: 2.39895392405874, Alt: 0.0 left = Lat: 48.864913, Long: 2.3988175, Alt : 0,0 center = Lat: 48.86491102019567, Long: 2.3988857120293696, Alt: 1.073741824E9'. –

4

1) Сначала определите, является ли это ошибкой в ​​андроиде, в сторонних библиотеках или на вашем устройстве, чтобы вы могли узнать, в каком порядке.

This answer дает решение о том, как это сделать:

Если вы написали (или используют) плагин, который в свою очередь использует родной C код/​​C++ с помощью NDK, это может указывать на ошибку в этот собственный код.

В противном случае это ошибка в прошивке устройства или эмулятора, который вы тестируете.

Если вы можете воспроизвести это в эмуляторе, устройстве Nexus с оригинальным ПЗУ или на разных устройствах разных производителей, это, вероятно, ошибка в самом Android. В этом случае создайте образец проекта, который может воспроизвести ошибку, и отправьте его вместе со всей трассировкой стека до http://b.android.com, трекера для Android OS.

Если вы столкнулись с этим только на одном устройстве или на одном стороннем ПЗУ, это, вероятно, более конкретная ошибка - лучше всего связаться с производителем устройства или издателем ПЗУ с вашими симптомами.

Есть эти два вопроса, которые обсуждают ошибки вы получаете в деталях:

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) С точки зрения синтаксического анализа значений ваших geobounds (как это, казалось бы, является где проблема может лежать), убедитесь, что вы правильно обрабатываете ваш синтаксический анализ между Gson и Json, с правильными значениями geobound. Похоже, что вы храните значения не в соответствии с тем, как вы их возвращаете.

From Mykong:

toJson() - Преобразование объекта Java в формате 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() - Преобразование JSON в Java объект

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); 

От 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 

Эти вопросы SO дать более подробную информацию:
How to parse json parsing Using GSON in android
parse JSON with gson and GsonBuilder()

3) Убедитесь, что вы передаете правильные значения для geobound со-ords. Этот вопрос Value does not fall within the expected range GeoboundingBox WinRT (хотя это C# дает хороший пример того, как сломать компоненты информации, которую вы пытаетесь сохранить и восстановить.

The answer проста.

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); 

И узнать, как разобрать ваш JSON с gson:

Use Gson to work with JSON in your Android apps

Существует также this gihub repo, чтобы вы могли найти больше идей.

0

Я разрешил эту же проблему следующим кодом.

Добавить android:vmSafeMode="true" в применении тега в Manifest файла.

Вашего приложение тег должен выглядеть так:

<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> 

Надеется, что это поможет.

+0

Я не знаю, как, но это позволяет избежать фатального сигнала, однако, как @DavidLeong сказал, что я сериализую указатель на C++, поэтому, когда я закрыл и снова открыл приложение, указатель был пустым. Теперь я вижу это лучше, потому что вместо получения ошибки я получаю объект с нулевыми координатами: «0,000000,0,000000; 0,000000,0,000000' –

+0

@DavidSeroussi, я надеюсь, что ваша проблема будет решена. –

+0

Я бы не рекомендовал это делать. Возможно, это скрывает проблему и, в конечном счете, повреждает кучу C++. –

Смежные вопросы