猜猜我自己发现了:显然,else-if块被检测为无法访问的代码而没有编译成二进制文件。至少那是我现在的结论。差不多早上7点了。稍作休息后会进一步调查。
我已经完全迷失了,并且已经在挖掘非常深的一天了。
我有一个Android应用程序。在某些时候,我的更改无法再调试。它接着运行陈旧的代码。我做了所有明显的事情(刷新,项目干净),不那么明显(eclipse -clean,我的项目的新结账),我做的最后一件事是:
猜猜看,它仍然表现如下:
当我在“//断点”处按断点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在运行时消失,所以过时的东西理论不是真正的选择。
请,任何帮助表示赞赏:(
答案 0 :(得分:0)
你有可能在一次迭代中击中// 1而在另一次迭加中击中// 2吗?也许连续两次调用封闭方法。
也许尝试使用adb卸载/安装,手动键入路径以确保指向您认为的位置。手动检查构建目录在干净和新构建之间是否干净。
在其中添加一条日志消息,并在logcat中注意它,以确保您正在运行新代码。
答案 1 :(得分:0)
不要相信调试器。使用一些日志语句来验证语句是否实际执行。
调试器混淆并跨越未真正执行的行并不罕见。
在程序启动时添加一些新的日志语句。您认为运行陈旧代码的假设可能不正确。
答案 2 :(得分:0)
显然,else-if块被检测为无法访问的代码而未编译到二进制文件中。至少这是我现在的结论。
实际上我通过调试发现,“4”不是正确的数字,实际上是一个永远不是“列”值的数字,但我没想到编译器在编译时知道:(< / p>