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?

Noh Kumado
quelle
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.

Rishabh
quelle
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.

Suragch
quelle
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
Lukk17s
quelle
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
Ahasbini
quelle
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).

ALUFTW
quelle
2

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

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

Sabin Acharya
quelle
1

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

Ender
quelle
0

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

Anonym-E
quelle
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.

kaya
quelle
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.

Andreas K. aus M.
quelle
0

Verwenden Sie den folgenden Befehl:

adb logcat -G 20M
Shubham Talekar
quelle