Android Logcat在获取空字符串时的行为非常奇怪
所以我遇到了一些奇怪的事情,让我有一段时间放松了。我一直在尝试打印一个包含字符串元素的ArrayList的内容,有时候,一个元素可能包含一个空字符串,这很好,绝对是我的意图。 所以我有这样的想法:Android Logcat在获取空字符串时的行为非常奇怪,android,android-logcat,Android,Android Logcat,所以我遇到了一些奇怪的事情,让我有一段时间放松了。我一直在尝试打印一个包含字符串元素的ArrayList的内容,有时候,一个元素可能包含一个空字符串,这很好,绝对是我的意图。 所以我有这样的想法: List<String> l = new ArrayList<String>(); //adding strings in l, sometimes it's an empty string for (int i=0; i < l.size(); i++) {
List<String> l = new ArrayList<String>();
//adding strings in l, sometimes it's an empty string
for (int i=0; i < l.size(); i++) {
Log.w("element in l : ", l.get(i));
}
adb pull /dev/log/events .
adb pull /dev/log/main .
adb pull /dev/log/radio .
adb pull /dev/log/system .
我很想知道这是怎么发生的,也许它可以帮助其他人不至于像我一样感到极度困惑。我想尝试记录一个空字符串会触发某种缓冲区,它会一直保存在那里,直到它得到要打印的内容,这是一个bug吗?这是一个有趣的问题。我刚刚在LogRabbit中尝试了这个,并且能够看到相同的结果 我快速浏览了一下android源代码,发现Log.W(…)以本机代码结束,并在中得到处理 这基本上将数据写入/dev/log/main(或其他日志之一) 您可以获得如下日志:
List<String> l = new ArrayList<String>();
//adding strings in l, sometimes it's an empty string
for (int i=0; i < l.size(); i++) {
Log.w("element in l : ", l.get(i));
}
adb pull /dev/log/events .
adb pull /dev/log/main .
adb pull /dev/log/radio .
adb pull /dev/log/system .
您需要按cntl-C,否则复制将永远发生
查看/dev/log/main中的原始日志,我发现确实记录了以下消息:
<8b>F×U^_<8c>^Y^U^Emfl_MessageList^@Before Empty^@^R^@^@^@!z^@^@!z^@^@
<8b>F×U^_<8c>^Y^U^Emfl_MessageList^@^@^]^@^@^@!z^@^@!z^@^@
<8b>F×U^_ <8c>^Y^U^Emfl_MessageList^@After Empty^@7^@^@^@^@^E^@^@^Z^E^@^@
看看这里,我发现logcat所做的基本上是:
adb shell
> exec logcat
所以我认为问题的根源在于logcat本身。Logcat.cpp调用到
根据我的快速阅读,我认为正在发生的事情是消息没有正确终止。空消息不会显示,除非附加了另一条消息,并且第一条消息溢出并显示第二条消息,因为它有适当的终止。不过,一般来说,日志上不应该有空标记。这是个坏习惯。您应该遵循Log.x(,|)@这正是我指定在遍历字符串的ArrayList时遇到这种行为的原因。我列表中的一些字符串可能是空的,我对记录所有元素感兴趣。顺便说一句,我的标签不是空的。我看到您记录日志的方式与您想要的方式有点混淆,您说:Log.w(“应该是空字符串,”);但是你实际上是指Log.w(TAG,)@JoxTraex我不是真的想要伪代码,但为什么不。。。
adb shell
> exec logcat