在开发Android应用程序时,陈旧的二进制文件可以隐藏在哪里?

时间:2012-01-10 04:06:45

标签: android eclipse

猜猜我自己发现了:显然,else-if块被检测为无法访问的代码而没有编译成二进制文件。至少那是我现在的结论。差不多早上7点了。稍作休息后会进一步调查。

我已经完全迷失了,并且已经在挖掘非常深的一天了。

我有一个Android应用程序。在某些时候,我的更改无法再调试。它接着运行陈旧的代码。我做了所有明显的事情(刷新,项目干净),不那么明显(eclipse -clean,我的项目的新结账),我做的最后一件事是:

  • 下载eclipse
  • 安装mercurial和adt
  • 安装android sdk
  • 将我的项目签出到处女工作区
  • 在新创建的虚拟设备中运行应用

猜猜看,它仍然表现如下:

当我在“//断点”处按断点F6(跳过)时,我可以单步执行“// 1”和“// 2”,但是在// 1之后,// 2应该无法访问。当我在// 1

时,调试器对else-if块中的变量一无所知
} else if (column == 4) { // breakpoint
    TextView cardSetLabel = (TextView) view;

    String name = cursor.getString(cardSetColumnIndex);
    name = name.substring(0, Math.min(15, name.length() - 1));
    cardSetLabel.setText(name); // 1
    return true;
}
return false; // 2

实际上,即使我删除了整个周围的代码块,它所做的事情仍然保持不变。这是伏都教,对不起。 至少删除整个Activity会导致Activity在运行时消失,所以过时的东西理论不是真正的选择。

请,任何帮助表示赞赏:(

3 个答案:

答案 0 :(得分:0)

你有可能在一次迭代中击中// 1而在另一次迭加中击中// 2吗?也许连续两次调用封闭方法。

也许尝试使用adb卸载/安装,手动键入路径以确保指向您认为的位置。手动检查构建目录在干净和新构建之间是否干净。

在其中添加一条日志消息,并在logcat中注意它,以确保您正在运行新代码。

答案 1 :(得分:0)

不要相信调试器。使用一些日志语句来验证语句是否实际执行。

调试器混淆并跨越未真正执行的行并不罕见。

在程序启动时添加一些新的日志语句。您认为运行陈旧代码的假设可能不正确。

答案 2 :(得分:0)

显然,else-if块被检测为无法访问的代码而未编译到二进制文件中。至少这是我现在的结论。

实际上我通过调试发现,“4”不是正确的数字,实际上是一个永远不是“列”值的数字,但我没想到编译器在编译时知道:(< / p>