2016-03-28 55 views
0


我在模擬器啓動過程中嘗試搜索某些日誌時遇到了一個奇怪的問題。
當我創建一個模擬器,亞行設備開始與「下線」,再I型
adb logcat -v time | tee log1.txt
和亞洲開發銀行將保持「等待換設備」,直到亞行網上成了。

然後當模擬器啓動時,我再次輸入adb logcat -v time | tee log2.txt,除了日誌文件的目的地。
現在,我用vimdiff log1.txt log2.txt這兩個日誌比較,發現LOG1錯過了許多記錄作爲Log_DiffAndroid adb logcat在模擬器啓動過程中缺少一些日誌

enter image description here

我不知道爲什麼在log1.txt一些日誌將錯過。 任何想法?

P.S.我在sdk中使用Android 5.1-64位仿真器。

回答

0

經過一番研究,終於找到了Android日誌守護進程的根本原因。

主要問題是LogBufferElement使用CLOCK_MONOTONIC時間戳作爲排序索引。

當多個LogBufferElement的時間戳相同時,LogReader只能轉儲最後一個條目。這就是爲什麼一些日誌似乎丟失了。

AOSP Android 5.1仍然有這個問題,但Android 6.0已經修復了它。 你可以參考這個patch

順便說一句,我也做了一些修改這個補丁。

主要原因是Android 6.0支持C++ 11原子性能庫,但Android 5.1還沒有。一些原子API需要回滾。 (例如,atomic_fetch_add_explicit())