在我不小心尝试在发布模式下调试之前,我曾经见过这样的事情,但事实并非如此。对我的问题。我在Android应用程序中有这段代码:
if (leftRight[0] != null && leftRight[1] != null) {
Log.d("", "test");
return leftRight;
} else {
Log.e("", "test134");
return null;
}
调试时,if语句为true,并执行第一个Log.d()。然而,当踩到下一行时,它会直接跳转到返回null,我不明白这是怎么回事,因为它在else而不是if。第二个Log.d()也被跳过。
希望我只是错过了一些小事,但我对于发生的事情感到非常困惑。任何指向我正确方向的事情都值得赞赏。
修改 如果重要,leftRight是包含两个点的Point []。
答案 0 :(得分:3)
基本上,你是对的,不应该发生。但是,请考虑以下代码:
Log.d("", "test");
if (leftRight[0] != null && leftRight[1] != null) {
return leftRight;
} else {
return null;
}
它具有相同的效果。也许您的编译器以这种方式重构代码,而调试器只是尽可能地反映这一点......
编辑:您可以使用" javap"
找出是否属于这种情况EDIT2:如果您更改日志消息以执行其他操作,您还可以尝试更改行为是否会发生变化...
答案 1 :(得分:2)
如果函数返回正确的值,则调试器存在一些问题的可能性很大。在构建代码后修改代码时,示例中可能会出现行之间不匹配的情况。我建议您清理工作区,重建它并重试。