Ich habe die anderen Beiträge über das Aufspüren der Gründe für das Erhalten einer SIGSEGV
in einer Android-App gelesen . Ich habe vor, meine App nach möglichen Null-Zeigern im Zusammenhang mit der Verwendung von Canvas zu SIGSEGV
durchsuchen , aber meine Barfs haben jedes Mal eine andere Speicheradresse. Außerdem habe ich gesehen code=1
und code=2
. Wenn die Speicheradresse 0x00000000
wäre, hätte ich eine Ahnung, dass es sich um einen NullPointer handelt.
Der letzte, den ich bekam, war code=2
:
A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2)
Irgendwelche Vorschläge, wie man das aufspürt?
Ich habe einen Verdächtigen, aber ich bin noch nicht daran interessiert, damit zu experimentieren. Meine App verwendet die OSMDroid-API für die Offline-Zuordnung. Die OverlayItem-Klasse repräsentiert Markierungen / Knoten auf der Karte. Ich habe einen Dienst, der Daten über das Netzwerk sammelt, um das OverlayItem zu füllen, die dann auf der Karte angezeigt werden. Um mein Design zu vereinfachen, habe ich OverlayItem in meine eigene NodeOverlayItem-Klasse erweitert, die einige zusätzliche Attribute enthält, die ich in der UI-Aktivität und im Service verwende. Dies gab mir einen einzigen Punkt mit Artikelinformationen für die Benutzeroberfläche und den Service. Ich habe Absichten verwendet, um an die Aktivität zu senden und die UI-Karte zu aktualisieren, wenn sich etwas geändert hat. Die Aktivität ist an den Service gebunden und es gibt eine Service-Methode, um die Liste der NodeOverlayItems abzurufen. Ich denke, es könnte die Verwendung von OverlayItem durch die OSMDroid-API sein. und mein Dienst aktualisiert gleichzeitig die Knoteninformationen. (ein Problem mit der Parallelität)
Während ich das schreibe, denke ich, dass das wirklich das Problem ist. Die Kopfschmerzen teilen nicht den Knoten und das OverlayItem von NodeOverlayItem auf, sondern die Aktivität benötigt einige Daten vom Knoten, die der Dienst enthält. Wenn die Aktivität erstellt wird (onResume usw.), müssen die OverlayItem-Objekte aus den Knotendaten neu erstellt werden, die der Dienst während der Abwesenheit der Aktivität verwaltet hat. Beispiel: Sie starten die App, der Dienst sammelt Daten, die Benutzeroberfläche zeigt sie an, Sie gehen zu Startseite und dann zurück zur App. Die Aktivität muss die OverlayItems aus den neuesten Dienstknotendaten abrufen und neu erstellen.
Ich weiß, dass dies keine guten oder klaren Fragen sind. Es ist, als ob alle meine SO-Fragen Nischen oder dunkel sind. Wenn jemand einen Vorschlag zur Interpretation dieser SIGSEGV
Fehler hat, wäre er sehr dankbar!
UPDATE Hier ist der letzte Absturz, der während einer Debug-Sitzung erfasst wurde. Ich habe 3 dieser Geräte, die zum Testen verwendet werden, und sie stürzen nicht alle zuverlässig ab, wenn ich entwickle und teste. Ich habe ein bisschen mehr hinzugefügt, damit die GC-Protokollierung notiert werden kann. Sie können sehen, dass das Problem wahrscheinlich nicht mit der Speichererschöpfung zusammenhängt.
03-03 02:02:38.328: I/CommService(7477): Received packet from: 192.168.1.102
03-03 02:02:38.328: I/CommService(7477): Already processed this packet. It's a re-broadcast from another node, or from myself. It's not a repeat broadcast though.
03-03 02:02:38.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:38.460: D/CommService(7477): Monitoring nodes...
03-03 02:02:38.515: D/dalvikvm(7477): GC_CONCURRENT freed 2050K, 16% free 17151K/20359K, paused 3ms+6ms
03-03 02:02:38.515: I/CommService(7477): Received packet from: 192.168.1.102
03-03 02:02:38.515: D/CommService(7477): Forwarding packet (4f68802cf10684a83ac4936ebb3c934d) along to other nodes.
03-03 02:02:38.609: I/CommService(7477): Received packet from: 192.168.1.100
03-03 02:02:38.609: D/CommService(7477): Forwarding packet (e4bc81e91ec92d06f83e03068f52ab4) along to other nodes.
03-03 02:02:38.609: D/CommService(7477): Already processed this packet: 4204a5b27745ffe5e4f8458e227044bf
03-03 02:02:38.609: A/libc(7477): Fatal signal 11 (SIGSEGV) at 0x68f52abc (code=1)
03-03 02:02:38.914: I/DEBUG(4008): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-03 02:02:38.914: I/DEBUG(4008): Build fingerprint: 'Lenovo/IdeaTab_A1107/A1107:4.0.4/MR1/eng.user.20120719.150703:user/release-keys'
03-03 02:02:38.914: I/DEBUG(4008): pid: 7477, tid: 7712 >>> com.test.testm <<<
03-03 02:02:38.914: I/DEBUG(4008): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 68f52abc
03-03 02:02:38.914: I/DEBUG(4008): r0 68f52ab4 r1 412ef268 r2 4d9c3bf4 r3 412ef268
03-03 02:02:38.914: I/DEBUG(4008): r4 001ad8f8 r5 4d9c3bf4 r6 412ef268 r7 4c479df8
03-03 02:02:38.914: I/DEBUG(4008): r8 4d9c3c0c r9 4c479dec 10 46cf260a fp 4d9c3c24
03-03 02:02:38.914: I/DEBUG(4008): ip 40262a04 sp 4d9c3bc8 lr 402d01dd pc 402d0182 cpsr 00000030
03-03 02:02:38.914: I/DEBUG(4008): d0 00000001000c0102 d1 3a22364574614c7d
03-03 02:02:38.914: I/DEBUG(4008): d2 403fc0000000007d d3 363737343433350a
03-03 02:02:38.914: I/DEBUG(4008): d4 49544341223a2273 d5 6f6567222c224556
03-03 02:02:38.914: I/DEBUG(4008): d6 3a223645676e6f4c d7 000000013835372d
03-03 02:02:38.914: I/DEBUG(4008): d8 0000000000000000 d9 4040000000000000
03-03 02:02:38.914: I/DEBUG(4008): d10 0000000000000000 d11 4040000000000000
03-03 02:02:38.914: I/DEBUG(4008): d12 4040000000000000 d13 0000000000000021
03-03 02:02:38.914: I/DEBUG(4008): d14 0000000000000000 d15 0000000000000000
03-03 02:02:38.914: I/DEBUG(4008): d16 3fe62e42fefa39ef d17 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008): d18 3fe62e42fee00000 d19 0000000000000000
03-03 02:02:38.914: I/DEBUG(4008): d20 0000000000000000 d21 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008): d22 4028000000000000 d23 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008): d24 0000000000000000 d25 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008): d26 0000000000000000 d27 c028000000000000
03-03 02:02:38.914: I/DEBUG(4008): d28 0000000000000000 d29 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008): d30 3ff0000000000000 d31 3fecccccb5c28f6e
03-03 02:02:38.914: I/DEBUG(4008): scr 60000013
03-03 02:02:39.046: I/DEBUG(4008): #00 pc 0006b182 /system/lib/libcrypto.so (EVP_DigestFinal_ex)
03-03 02:02:39.046: I/DEBUG(4008): #01 pc 0006b1d8 /system/lib/libcrypto.so (EVP_DigestFinal)
03-03 02:02:39.054: I/DEBUG(4008): #02 pc 0001f814 /system/lib/libnativehelper.so
03-03 02:02:39.054: I/DEBUG(4008): #03 pc 0001ec30 /system/lib/libdvm.so (dvmPlatformInvoke)
03-03 02:02:39.054: I/DEBUG(4008): #04 pc 00058c70 /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)
03-03 02:02:39.054: I/DEBUG(4008): code around pc:
03-03 02:02:39.054: I/DEBUG(4008): 402d0160 0003151e 4604b570 f7ff460d 4620ff81 ....p..F.F.... F
03-03 02:02:39.054: I/DEBUG(4008): 402d0170 f7ff4629 bd70ff93 4604b570 460e6800 )F....p.p..F.h.F
03-03 02:02:39.054: I/DEBUG(4008): 402d0180 68834615 dd062b40 21fa4810 44784a10 .F.h@+...H.!.JxD
03-03 02:02:39.054: I/DEBUG(4008): 402d0190 f7c8447a 6821f80f 698a4620 47904631 zD....!h F.i1F.G
03-03 02:02:39.054: I/DEBUG(4008): 402d01a0 b1154606 68836820 6822602b b12b6a13 .F.. h.h+`"h.j+.
03-03 02:02:39.054: I/DEBUG(4008): code around lr:
03-03 02:02:39.054: I/DEBUG(4008): 402d01bc 68e06821 21006c4a ea0af7c4 bd704630 !h.hJl.!....0Fp.
03-03 02:02:39.054: I/DEBUG(4008): 402d01cc 00031492 000314b5 4604b570 ffcef7ff ........p..F....
03-03 02:02:39.054: I/DEBUG(4008): 402d01dc 46204605 ff12f7ff bd704628 4604b573 .F F....(Fp.s..F
03-03 02:02:39.054: I/DEBUG(4008): 402d01ec 2102460d fb36f002 42ab6823 b123d020 .F.!..6.#h.B .#.
03-03 02:02:39.054: I/DEBUG(4008): 402d01fc b1136c5b f7c868e0 68a0fccf 05c26025 [l...h.....h%`..
03-03 02:02:39.054: I/DEBUG(4008): memory map around addr 68f52abc:
03-03 02:02:39.054: I/DEBUG(4008): 4d8c5000-4d9c4000
03-03 02:02:39.054: I/DEBUG(4008): (no map for address)
03-03 02:02:39.054: I/DEBUG(4008): b0001000-b0009000 /system/bin/linker
03-03 02:02:39.054: I/DEBUG(4008): stack:
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b88 408d1f90 /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b8c 412ef258 /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b90 00000001
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b94 408d6c58 /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b98 408d6fa8 /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3b9c 4c479dec
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3ba0 46cf260a /system/framework/core.odex
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3ba4 408735e7 /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3ba8 412ef258 /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bac 002bf070 [heap]
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bb0 412ef258 /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bb4 00000000
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bb8 412ef268 /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bbc 00000000
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bc0 df0027ad
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bc4 00000000
03-03 02:02:39.054: I/DEBUG(4008): #00 4d9c3bc8 001ad8f8 [heap]
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bcc 002ae0b8 [heap]
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bd0 00000004
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bd4 402d01dd /system/lib/libcrypto.so
03-03 02:02:39.054: I/DEBUG(4008): #01 4d9c3bd8 001ad8f8 [heap]
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3bdc 002ae0b8 [heap]
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3be0 00000004
03-03 02:02:39.054: I/DEBUG(4008): 4d9c3be4 4024e817 /system/lib/libnativehelper.so
03-03 02:02:39.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:39.500: D/CommService(7477): Monitoring nodes...
03-03 02:02:39.500: D/dalvikvm(7477): GC_FOR_ALLOC freed 2073K, 16% free 17118K/20359K, paused 51ms
03-03 02:02:39.632: D/dalvikvm(7477): GC_CONCURRENT freed 1998K, 16% free 17162K/20359K, paused 2ms+4ms
03-03 02:02:40.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:40.445: D/CommService(7477): Monitoring nodes...
03-03 02:02:40.562: D/dalvikvm(7477): GC_CONCURRENT freed 2045K, 16% free 17158K/20359K, paused 3ms+4ms
03-03 02:02:41.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:41.445: D/CommService(7477): Monitoring nodes...
03-03 02:02:41.531: D/dalvikvm(7477): GC_CONCURRENT freed 2045K, 16% free 17154K/20359K, paused 3ms+12ms
03-03 02:02:42.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:42.445: D/CommService(7477): Monitoring nodes...
03-03 02:02:42.507: D/dalvikvm(7477): GC_CONCURRENT freed 2068K, 16% free 17128K/20359K, paused 3ms+4ms
03-03 02:02:42.679: D/dalvikvm(7477): GC_CONCURRENT freed 2006K, 16% free 17161K/20359K, paused 2ms+12ms
03-03 02:02:43.140: I/BootReceiver(1236): Copying /data/tombstones/tombstone_05 to DropBox (SYSTEM_TOMBSTONE)
03-03 02:02:43.210: D/dalvikvm(1236): GC_FOR_ALLOC freed 912K, 17% free 10207K/12295K, paused 62ms
03-03 02:02:43.265: D/dalvikvm(1236): GC_FOR_ALLOC freed 243K, 16% free 10374K/12295K, paused 49ms
03-03 02:02:43.265: I/dalvikvm-heap(1236): Grow heap (frag case) to 10.507MB for 196628-byte allocation
quelle
Java.Lang.Object
. Sortierte meine AbstürzeAntworten:
Holen Sie sich zunächst Ihren Tombstone-Stack-Trace, der bei jedem Absturz Ihrer App gedruckt wird. Etwas wie das:
Verwenden Sie dann das
addr2line
Dienstprogramm (finden Sie es in Ihrer NDK-Toolkette), um die abstürzende Funktion zu finden. In diesem Beispiel tun Sie diesUnd Sie werden sehen, woher Sie das Problem haben. Natürlich hilft dir das nicht, da es in libc ist.
Sie können also die Dienstprogramme von kombinieren
arm-eabi-objdump
, um das endgültige Ziel zu finden.Glauben Sie mir, es ist eine schwierige Aufgabe.
Nur für ein Update. Ich glaube, ich habe lange Zeit ein natives Android-Build aus dem gesamten Quellbaum erstellt, bis heute habe ich die NDK-Dokumente sorgfältig gelesen. Seit der Veröffentlichung von NDK-r6 wird ein Dienstprogramm namens bereitgestellt
ndk-stack
.Es folgt der Inhalt von offiziellen NDK-Dokumenten mit dem NDK-r9-Teerball.
Überblick:
ndk-stack
ist ein einfaches Tool, mit dem Sie Stapelspuren filtern können, wie sie in der Ausgabe von 'adb logcat' angezeigt werden, und jede Adresse in einer gemeinsam genutzten Bibliothek durch die entsprechenden Werte ersetzen können.Kurz gesagt, es wird etwas übersetzen wie:
In die besser lesbare Ausgabe:
Verwendung:
Dazu benötigen Sie zunächst ein Verzeichnis mit symbolischen Versionen der gemeinsam genutzten Bibliotheken Ihrer Anwendung. Wenn Sie das NDK-Build-System (dh
ndk-build
) verwenden, befinden sich diese immer unter $ PROJECT_PATH / obj / local /, wo für den ABI Ihres Geräts steht (dharmeabi
standardmäßig).Sie können den
logcat
Text entweder als direkte Eingabe in das Programm eingeben, z.Oder Sie können die Option -dump verwenden, um den Logcat als Eingabedatei anzugeben, z.
WICHTIG:
Das Tool sucht in der
logcat
Ausgabe nach der Anfangszeile mit den Starts , dh nach etwas, das wie folgt aussieht:Vergessen Sie beim Kopieren / Einfügen von Traces diese Zeile aus den Traces
ndk-stack
nicht oder funktionieren nicht richtig.MACHEN:
Eine zukünftige Version von
ndk-stack
wird versuchenadb logcat
, den Bibliothekspfad automatisch zu starten und auszuwählen. Im Moment müssen Sie diese Schritte manuell ausführen.Ab sofort
ndk-stack
behandelt keine Bibliotheken , die Debug - Informationen nicht in ihnen. Es kann nützlich sein, zu versuchen, den nächstgelegenen Funktionseintrittspunkt zu einer bestimmten PC-Adresse zu ermitteln (z. B. wie im obigen Beispiel libc.so).quelle
printf
. Kann ich die Ausgabe davonprintf
aus den nativen Bibliotheken sehen.OK! Es tut mir wirklich leid für diejenigen, die tatsächlich Kommentare und Antworten eingereicht haben, aber ich habe das Problem gefunden. Ich denke nicht, dass dies vielen anderen helfen wird, ihre persönliche SIGSEGV aufzuspüren, aber meine (und es war sehr schwer) war völlig damit verbunden:
https://code.google.com/p/android/issues/detail?id=8709
Die libcrypto.so in meinem Dump hat mich irgendwie darauf hingewiesen. Ich mache einen MD5-Hash von Paketdaten, wenn ich versuche festzustellen, ob ich das Paket bereits gesehen habe, und überspringe es, wenn ich es hatte. Ich dachte irgendwann, dies sei ein hässliches Threading-Problem im Zusammenhang mit der Verfolgung dieser Hashes, aber es stellte sich heraus, dass es sich um die Klasse java.security.MessageDigest handelte! Es ist nicht threadsicher!
Ich habe es mit einer UID ausgetauscht, die ich in jedes Paket gestopft habe, basierend auf der UUID des Geräts und einem Zeitstempel. Keine Probleme seitdem.
Ich denke, die Lektion, die ich denjenigen erteilen kann, die sich in meiner Situation befanden, besteht darin, auch wenn Sie eine 100% ige Java-Anwendung sind, auf die native Bibliothek und das Symbol zu achten, die im Absturzspeicherauszug für Hinweise angegeben sind. Wenn Sie nach SIGSEGV + googeln, geht der Name lib .so viel weiter als der nutzlose Code = 1 usw. Überlegen Sie sich als Nächstes, wo Ihre Java-App nativen Code berühren könnte, auch wenn Sie nichts tun. Ich habe den Fehler gemacht, anzunehmen, dass es sich um ein Service + UI-Threading-Problem handelt, bei dem der Canvas etwas gezeichnet hat, das null ist (der häufigste Fall, in dem ich auf SIGSEGV gegoogelt habe), und habe die Möglichkeit ignoriert, dass es vollständig mit dem von mir geschriebenen Code zusammenhängt bezogen auf die lib .so im Absturzspeicherauszug. Natürlich würde java.security aus Gründen der Geschwindigkeit eine native Komponente in libcrypto.so verwenden. Sobald ich mich darauf eingelassen hatte, googelte ich nach Android + SIGSEGV + libcrypto. so und fand das dokumentierte Problem. Viel Glück!
quelle
Ich habe diesen Fehler erhalten, indem ich ein Objekt in den freigegebenen Einstellungen als gson-konvertierte Zeichenfolge gespeichert habe. Der gson-String war nicht gut, daher funktionierte das Abrufen und Deserialisieren des Objekts nicht richtig. Dies bedeutete, dass alle nachfolgenden Zugriffe auf das Objekt zu diesem Fehler führten. Unheimlich :)
quelle
android.Location
Objekt auchSharedPreferences
in einemWakefulBroadcastReceiver
. Meistens funktioniert es, aber manchmal bekomme ich den gefürchtetenSIGSEGV
Absturz. Können Sie uns bitte mitteilen, wie Sie es gelöst haben?Ich habe diesen Fehler auch oft bekommen und ihn gelöst. Dieser Fehler tritt bei der Speicherverwaltung auf der nativen Seite auf.
Ihre Anwendung greift auf Speicher außerhalb ihres Adressraums zu. Dies ist höchstwahrscheinlich ein ungültiger Zeigerzugriff. SIGSEGV = Segmentierungsfehler im nativen Code. Da es in Java-Code nicht vorkommt, wird kein Stack-Trace mit Details angezeigt. Möglicherweise werden jedoch noch einige Stapelverfolgungsinformationen im Protokoll angezeigt, wenn Sie sich nach dem Absturz des Anwendungsprozesses ein wenig umschauen. Sie erfahren nicht die Zeilennummer in der Datei, sondern, welche Objektdateien und Adressen in der Aufrufkette verwendet wurden. Von dort aus können Sie häufig herausfinden, welcher Bereich des Codes problematisch ist. Sie können auch eine native GDB-Verbindung zum Zielprozess einrichten und diese im Debugger abfangen.
quelle
Heute stand ich vor einem
Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 18161
Problem und ich kämpfe einen halben Tag, um dieses zu lösen.Ich habe viele Dinge versucht, um den Cache zu leeren und die .gradle-Datei und alles zu löschen.
Endlich bekomme ich
disable Instant Run
und jetzt dieses Problem nicht mehr. Jetzt funktioniert meine Anwendung, nachdem auch die sofortige Ausführung aktiviert wurde. Möglicherweise handelt es sich um das Sofortlaufproblem. Versuchen Sie, den Sofortlauf zu deaktivieren und zu aktivierenAus dieser Antwort:
quelle
Deaktivieren Sie die Android-Hardwarebeschleunigung in Ihrem Manifest.
quelle
Ich habe diesen Fehler festgestellt, als ich versucht habe, auf die 'Zeichenfläche' außerhalb von zuzugreifen
onDraw()
Eine sehr schlechte Praxis: /
quelle
Ich habe diesen Fehler erhalten, als ich eine Bitmap wie diese verwendet habe:
Was das Problem für mich behoben hat, war die Verkleinerung der Bitmap (> 1000px hoch auf 700px).
quelle
BitmapOptions.inSampleSize
Ich habe mit SIGSEGV auf Android 4.4.4 (Nexuses, Samsungs) konfrontiert. Es stellte sich heraus, dass beim Parsen
null
String
mit ein schwerwiegender Fehler aufgetreten istDecimalFormat
Unter Android> 21 wurde es erfolgreich mit try / catch behandelt
quelle
Ich konfrontiert dieses Problem Moment vor, nachdem er von der Migration
android.support
zuandroidx
.Das Problem war
renderscript
.Lösung: Ich habe
build.gradle
diese beiden Zeilen entfernt:nachdem dieser Projektaufbau aufgrund ungelöster Referenzen fehlgeschlagen ist:
Also habe ich sie geändert in:
Danach waren alle Probleme weg.
quelle
Wenn Sie die Vitamio-Bibliothek verwenden und dieser schwerwiegende Fehler auftritt.
Stellen Sie dann sicher, dass in Ihrem Projekt gradle targetSdkVersion kleiner als 23 sein muss.
Vielen Dank.
quelle
In meinem Fall (ich verwende Xamarin Forms) wurde dieser Fehler aufgrund eines Bindungsfehlers ausgelöst - z. B.:
Grundsätzlich habe ich versehentlich die Ansichtsmodelleigenschaft gelöscht. Wenn Sie bei Xamarin-Entwicklern das gleiche Problem haben, überprüfen Sie Ihre Bindungen ...
quelle
Wenn Sie Ihrem Projekt nativen C-Code hinzugefügt haben, kann diese Antwort hilfreich sein.
Ich hatte einige native C-Code in Android-Projekt hinzugefügt.
Jetzt habe ich versucht, auf den Code zuzugreifen, der mir eine native Zeichenfolge zurückgab, bevor ich die Zeichenfolge verarbeitete, deren Standardwert ich als nullptr festgelegt hatte. Beim Abrufen des Werts in Java-Code ist dieses Problem aufgetreten.
Da unser nativer C-Code nicht aus dem Java-Verzeichnis stammt, erhalten Sie keinen Hinweis auf die genaue Codezeile, die das Problem verursacht. Daher würde ich Ihnen empfehlen, Ihre CPP-Datei zu überprüfen und dort nach Hinweisen zu suchen.
Ich hoffe, Sie werden das Problem bald beseitigen. :) :)
quelle
In meinem Fall wurde das Problem vom Android Profiler verursacht. Klicken Sie in Android Studio auf "Android Profiler" und "Sitzung beenden".
Ironischerweise verursachte es auch extreme Leistungsprobleme in der Anwendung.
quelle
Fügen Sie diese beiden Zeilen zu Ihrem build.gradle im Android-Bereich hinzu:
quelle
Überprüfen Sie Ihren JNI / nativen Code. Eine meiner Referenzen war null, aber sie war zeitweise, so dass es nicht sehr offensichtlich war.
quelle
Überprüfen Sie Ihre nativen Funktionen, ob sie ordnungsgemäß zurückgegeben werden oder nicht. Wenn sie nicht zurückgegeben werden, fügen Sie bitte return-Anweisungen hinzu.
quelle
Für mich war dieses Problem auf eine schlechte Besetzung zwischen zwei Aktivitäten zurückzuführen. Ich habe diese Methode kürzlich von Aktivität1 auf eine andere 2 verschoben. Dabei hat der Refactor diese explizite Besetzung wie zuvor belassen. Also anstatt zu tun
Ich sollte es tun
Hinweis: Aber dieser Fehler ist unter Android 8.0 nicht aufgetreten. Ich bin mir noch nicht sicher, warum.
*** Ich hoffe es hilft.
quelle
Ich hatte diesen Segmentierungsfehler aufgrund von Speicherproblemen . Meine Struktur mit vielen Variablen und Arrays hatte dieses Array der Größe 1024.
PS: Dies ist eine Problemumgehung und keine Lösung. Es ist notwendig, die Strukturgröße zu finden, und die dynamische Speicherzuordnung ist eine bessere Option.
quelle
Ich habe diesen Fehler erhalten, als ich ViewTreeObserver inside
onDraw()
verwendet habe.quelle
Ich hatte dieses Problem mit einem Paket, das meiner App hinzugefügt wurde (FancyShowCaseView) und dieses Problem auf Pre-Lolipop verursacht hat. Dieses Paket wurde in Kotlin geschrieben und meine Hauptcodes wurden in Java geschrieben. Jetzt überprüfe ich die Version in Pre-Lolipop und lasse nicht zu, dass ihre Klasse ausgeführt wird. vorübergehend das Problem gelöst. Überprüfen Sie dies, wenn Sie ein ähnliches Problem wie ich haben
quelle
2 von 12 Telefonen haben einen Fehler zurückgegeben und festgestellt, dass das Problem in onDrawFrame () liegt. Einige Objekte waren null. Ich weiß nicht warum. Ich habe sie nur festgelegt
if(gears==null) return;
.quelle
Ich hatte das Problem, als ich ein PDF mit den PDF-APIs von Android erstellte, und habe versehentlich die Zeichenfläche canvas.save () und canvas.restore () verwendet, nachdem ich eine PDF-Seite geschlossen hatte.
quelle