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
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 № 1Po 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 ())