Logcat stürzt mit Fehler ab: unerwartete EOF


81

Ich führe einige langwierige Berechnungen durch und etwas geht ziemlich spät schief. Ich habe versucht, Haltepunkte zu verwenden, aber bisher ohne Erfolg. Also habe ich ein in die Schleife gesetzt Log.d, um zu überwachen ...

Aber ziemlich bald stürzt Logcat ab mit:

02-08 16:35:42.820 2936-3402/com.nohkumado.geneticsolving.full D/BaseC: 
    norm:BC sq:49.0 dis:0.0 con:50.0/BC sq:56.0 dis:4.0 con:94.0=1.4069148936170213

    read: unexpected EOF!

    --------- beginning of crash

und ich muss das Studio neu starten, damit Logcat wieder läuft.

Ich habe nach einer Einstellung für die Puffergröße für Logcat gesucht, aber bisher habe ich nichts gefunden. Was kann getan werden?


1
Der Fragesteller bringt zwei Dinge zusammen, die nichts miteinander zu tun haben. Die Meldung "Beginn des Absturzes" bedeutet, dass eine Android-App abgestürzt ist und nicht logcat. Das "lesen: unerwartete EOF!" kommt tatsächlich vom logcat-Prozess und zeigt an, dass der logcat-Prozess seine Verbindung zum logd-Prozess verloren hat.
Samstag, den

Nun, die App stürzte nicht ab, sie konvergierte nur nicht ... aber ich konnte sie wegen der Pufferbeschränkung des Logcat nicht sehen ...
Noh Kumado

Antworten:


97

Versuchen Sie , Logger Größen Puffer zu off unter Einstellungen-> Entwickleroptionen , auf Ihrem Gerät / Emulator . Dies kann vorkommen, weil der Logger-Puffer so konfiguriert ist, dass nur zu einem bestimmten Zeitpunkt eine begrenzte KB an Protokollen angezeigt wird. Der nächste Satz von Protokollen wird erst angezeigt, wenn der vorherige Puffer gelöscht wurde.


2
In der Tat hatte der Logcat auf der Tablettseite eine feste Länge!
Noh Kumado

9
Ich habe es ausgeschaltet, jetzt sehe ich überhaupt keine Protokolle mehr. (Samsung Note 8). Ich denke nicht, dass dies eine Lösung für alle ist
siehe

1
Ich habe es ausgeschaltet, aber ich habe immer noch den Fehler als Fragenöffner erhalten.
Nisim Naim

Das hat bei mir funktioniert (mit dem Emulator). Das Problem begann erst vor kurzem.
Lassi Kinnunen

Dies sollte keine genehmigte Antwort sein. Es ist besser, den Puffer zu vergrößern, um zu verhindern, dass er leer wird, als ihn auf den realen Geräten auszuschalten. Obwohl es möglicherweise geräteabhängig / von der Version des Android-Betriebssystems abhängig ist.
Sergey Dryganets

131

Vollere Antwort

Die akzeptierte Antwort hat bei mir nicht funktioniert. Anstatt den Logger-Puffer auszuschalten, habe ich ihn auf die maximale Größe erhöht.

  1. Aktivieren Sie die Entwickleroptionen in Ihrem Emulator oder Gerät ( nicht in Android Studio ), falls dies noch nicht aktiviert wurde: Gehen Sie in Ihrem Emulator oder Gerät zu Einstellungen> System> Info (emuliertes Gerät) und klicken Sie siebenmal auf Build-Nummer .
  2. Gehen Sie zu Einstellungen> System> Entwickleroptionen> Logger-Puffergrößen und wählen Sie einen höheren Wert.

Geben Sie hier die Bildbeschreibung ein

  1. Ich musste auch den Emulator neu starten.

Das ursprüngliche Problem tritt also anscheinend auf, weil der Geräteprotokollpuffer für eine lange Protokollierung gefüllt wird. Durch Erhöhen der Puffergröße können Sie mehr in einer einzelnen Protokollierungssitzung protokollieren.


1
Auf diese Weise kann ich das Problem an einem normalen Arbeitstag vermeiden. Für mich gibt es eine Ausnahme: Verwenden eines Samsung-Telefons in einer Umgebung mit vielen Bluetooth-Geräten. Samsung hat beschlossen, jeden Bluetooth-Scan auf Systemebene zu protokollieren, und anscheinend reichen 16 MB dafür nicht aus. Es wird immer noch 4 oder 5 Mal am Tag passieren, wenn ich über 30 Bluetooth-Geräte um mich habe.
reTs

Der logd-Puffer ist ein Ringpuffer. Eine Änderung seiner Größe sollte keine messbaren Auswirkungen darauf haben, ob die Verbindung zwischen logcat und logd unterbrochen wird. Sie müssen lediglich ändern, wie viel Protokollierungsverlauf sich im Speicher befindet. Es ist höchst unwahrscheinlich, dass dies das Problem behebt.
Samstag, den

1
@ Satur9nine, ich kann nicht sagen, ob es das Problem auf der zugrunde liegenden Ebene behebt, aber es hat mein Problem dadurch behoben, dass es den Absturz verhindert und mehr Protokollnachrichten angezeigt hat.
Suragch

Nachdem ich ein TWRP-Backup von einem Moto G5 Plus auf ein anderes übertragen hatte, bestand mein Logcat-Puffer aus einigen Ereignissen von vor Monaten, einigen Ereignissen von heute, gefolgt von read: unexpected EOF!. Eine Erhöhung auf 16 Millionen behebt das Problem und lässt die monatelangen Ereignisse verschwinden.
Nyanpasu64

16

In den Entwickleroptionen können Sie die Logger-Puffergröße auf maximal 16 MB festlegen.
(Einstellung> System> Entwickleroptionen> Logger-Puffergrößen)

Wenn Sie mehr benötigen, können Sie es mit adb einstellen. Zum Beispiel können Sie es auf 100M einstellen:

adb logcat -G 100M

6

In diesem von Ihnen geposteten Protokoll wird angegeben, dass die App abstürzt (obwohl dies nicht wie bei einem Stacktrace üblich ist, aber abstürzt), nicht der Logcat. Haben Sie die App ausgewählt und den Filter im Logcat auf "Ausgewählte Anwendung anzeigen" gesetzt? Wenn ja, setzen Sie den Filter einfach auf "Kein Filter" und Sie sehen alle Protokolle Ihrer App.

Auch für den Fall, dass Sie den Logcat aus irgendeinem Grund neu starten müssen, anstatt Android Studio neu zu starten, können Sie die folgenden Befehle ausführen, die adb neu starten und schließlich auch Ihren Logcat neu starten:

adb kill-server
adb start-server

das ist seltsam, weil die app weiter zu funktionieren scheint? Ich bin über die Berechnung selbst gewöhnt (daher mein Wunsch, sie zu debuggen), aber der Rest funktioniert, das Klicken auf Schaltflächen usw. liefert weiterhin das erwartete Verhalten? Der ADB-Trick stellte den Logcat wieder her, überspringt dann leider den tatsächlichen Zeitpunkt ...
Noh Kumado

Ich dachte, was du mit langwieriger Berechnung meinst und dann geht etwas schief, was bedeutet, dass die App wahrscheinlich verzögert wird oder nicht mehr reagiert und dann abstürzt. Besteht die App aus mehreren Aktivitäten? Und wenn der Fehler auftritt, ist es so, als würde man zu einer vorherigen Aktivität zurückkehren? Kein Filter zeigt nicht alle Protokolle an, oder?
Ahasbini

Nein, die App läuft reibungslos. Die Ergebnisse weichen irgendwann von den erwarteten ab. Ja, mehrere Aktivitäten und die Arbeitsthreads werden mit asynchronen Aufgaben ausgeführt. Nein, nach dieser Absturzmeldung bleibt logcat für alles langweilig.
Noh Kumado

3

Wenn Sie von einem echten Telefon aus arbeiten - trennen und verbinden Sie das Telefon von dem für mich funktionierenden USB (der Puffer wird leer - wie von @Suragch vorgeschlagen).


2

Das Ändern der Puffergröße hat bei mir nicht funktioniert. Ich habe meine USB-Verbindung in einen USB 3.0-Anschluss geändert.


1
Wunderbar! Vielen Dank für diesen Hinweis. Ich hatte das gleiche Problem.
Ethan Leroy

Entfernen Sie in diesem Sinne auch alle USB-Hubs zwischen Ihrem Gerät und Ihrem Computer und / oder probieren Sie verschiedene USB-Anschlüsse an Ihrem Computer aus.
Samstag, den

1

adb logcat -G 1m

Geben Sie dies auf dem Terminal ein, es hat bei mir funktioniert


1

Starten Sie Ihr Gerät neu! Ich habe keine Ahnung, warum es nach dem Neustart meines Mobiltelefons bei mir funktioniert.


0

Gehen Sie einfach zu Datei -> Caches ungültig machen / Neustart , damit Android Studio die Arbeit erledigt


Ich denke nicht, dass dies bei dem Problem selbst helfen wird, aber der AS-Neustart wird logcat neu starten und anscheinend das Problem beheben.
PNDA

@PNDA warum nicht Android Ihre Caches validieren lassen und es für Sie neu starten? Ich sehe nicht, wo der Nachteil ist
Anonymous-E

0

Leider scheint dies immer noch ein Problem zu sein. Ich konnte keine zufriedenstellende Lösung finden, außer ein Plugin ( Datei -> Einstellungen -> Plugins -> Marktplatz ) namens " Log Viewer " zu installieren . Funktioniert besser als der integrierte Logcat-Viewer von Android Studio.


0

Die Empfehlungen haben bei mir nicht funktioniert. Ich habe diese Voreinstellung endlich geändert:

Menü "Ausführen", Menüeintrag "Konfigurationen bearbeiten", dann auf der linken Seite "Android App / App" und auf der rechten Seite die Registerkarte "Michelangelo" und schließlich "Logcat: Protokoll vor dem Start löschen" aktivieren.

Natürlich hat dies Nebenwirkungen, aber zumindest kann ich die Protokollausgabe wieder sehen.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.