/ / Android adb logcat brakuje niektórych dzienników podczas uruchamiania emulatora - Android, emulator Androida, android-logcat

Android adb logcat brakuje niektórych dzienników podczas uruchamiania emulatora - Android, emulator Androida, android-logcat


Napotkałem dziwny problem, gdy próbowałem przeszukać niektóre dzienniki podczas uruchamiania emulatora.
Kiedy tworzę emulator, urządzenie adb zaczynało się od „offline”, a potem piszę
adb logcat -v time | tee log1.txt
a adb będzie „czekać na urządzenie”, dopóki adb nie przejdzie w tryb online.

Następnie, gdy uruchamia się emulator, piszę adb logcat -v time | tee log2.txt ponownie oprócz miejsca docelowego pliku dziennika.
Teraz używam vimdiff log1.txt log2.txt aby porównać te dwa dzienniki i okazało się, że log1 pominął wiele dzienników jako Log_Diff

wprowadź opis obrazu tutaj

Nie mam pojęcia, dlaczego brakuje niektórych logów w log1.txt. Jakieś pomysły?

P.S. Korzystam z emulatora Androida 5.1-64bit w SDK.

Odpowiedzi:

0 dla odpowiedzi № 1

Po kilku badaniach w końcu znalazłem główną przyczynę w demonie dziennika Androida.

Głównym problemem jest to, że LogBufferElement używa znacznika czasu CLOCK_MONOTONIC jako indeksu sortowania.

Gdy znacznik czasu wielu LogBufferElement jest taki sam, LogReader może zrzucić tylko ostatni wpis. Właśnie dlatego niektóre dzienniki wydają się gubione.

AOSP Android 5.1 nadal miał ten problem, ale Android 6.0 go rozwiązał. Możesz się do tego odwołać łata.

Przy okazji, zrobiłem też modyfikację dla tej łatki.

Głównym powodem jest to, że Android 6.0 obsługuje biblioteki C ++ 11 atomowej biblioteki std, ale Android 5.1 jeszcze tego nie zrobił. Niektóre atomowe interfejsy API wymagają wycofania. (np. atomic_fetch_add_explicit ())