为什么Android模拟器跳过我的return语句?

我在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更加简单明了,但是我想想返回指令仍然会得到一些优化,也就是说,该函数的清理部分是共享的,因此返回总能使您到达那里.

不要过分依赖光标的精确位置-而是使用调试输出(在实践中也更快).

上一篇:python-Android.mk调试输出


下一篇:VS 2008调试:System.ArgumentException?