Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Logcat在获取空字符串时的行为非常奇怪_Android_Android Logcat - Fatal编程技术网

Android Logcat在获取空字符串时的行为非常奇怪

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++) {

所以我遇到了一些奇怪的事情,让我有一段时间放松了。我一直在尝试打印一个包含字符串元素的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++) {
    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