当我在模拟器启动期间尝试搜索某些日志时遇到了一个奇怪的问题
当我创建一个模拟器时,adb设备以" offline"首先,然后我输入
adb logcat -v time | tee log1.txt
和adb将保持"等待设备"直到adb上线。
然后,当模拟器启动时,我再次键入adb logcat -v time | tee log2.txt
,但日志文件的目标除外。
现在,我使用vimdiff log1.txt log2.txt
来比较这两个日志,发现log1错过了很多日志作为Log_Diff
我不知道为什么一些log1.txt中的日志会丢失。
有任何想法吗?
附:我在sdk中使用Android 5.1-64bit Emulator。
答案 0 :(得分:0)
经过一番研究,终于找到了Android日志守护程序的根本原因。
主要问题是LogBufferElement使用CLOCK_MONOTONIC时间戳作为排序索引。
当多个LogBufferElement的时间戳相同时,LogReader可能只转储最后一个条目。这就是为什么有些日志似乎丢失了。
AOSP Android 5.1仍有此问题,但Android 6.0已修复它。 您可以参考此patch。
顺便说一句,我也对这个补丁进行了一些修改。
主要原因是Android 6.0支持C ++ 11原子std库,但Android 5.1还没有。一些原子API需要回滚。 (例如atomic_fetch_add_explicit())