我在Windows仿真器下的Android 1.5应用程序中出现了意外行为,并使用Eclipse进行了调试.这是代码正在做什么的概括:
if (someCondition) {
System.out.println("got here");
return "a";
}
if (someOtherCondition)
return "b"
return "c";
如果我使用调试器逐步执行此代码,则如果someCondition为true,则将输出“ got here”,但随后将跳转至最终return语句,就好像它将执行该行一样.据我所知,它返回“ a”,但令人困惑,因为它似乎要返回“ c”.
如果someCondition为false,而someOtherCondition为true,则调试器将转到返回“ b”行-它不会跳转到最终的return语句,然后按预期方式保留该方法.
正如我提到的那样,似乎总是在返回预期的行为,但是调试器跳到错误的行这一事实促使我追逐了幻象错误.完全重建,重新启动Eclipse和重新启动Windows都没有解决问题-完全可以重新创建.
有任何想法吗?
解决方法:
请记住,您执行和调试的程序不是编写的Java代码-它是从Java代码编译而成的字节码.
如果逐步浏览经过优化的C代码,则可以期望光标像愚蠢的代码一样在整个代码中跳转,具体取决于调度程序能够重新安排内容的数量.
Java更加简单明了,但是我想想返回指令仍然会得到一些优化,也就是说,该函数的清理部分是共享的,因此返回总能使您到达那里.
不要过分依赖光标的精确位置-而是使用调试输出(在实践中也更快).