在 Java/Eclipse 中,为什么在代码中设置断点会改变该语句的效果?

2023-12-29

我正在 Eclipse 中编写一个 Android 应用程序,并使用TextView。不同的线程有时会更改此视图的文本,代码如下:

runOnUiThread(new Runnable() {

    @Override
    public void run() {
        view.setText(newLyric);
    }
});

我想调试setText行来检查是否传入了正确的字符串(对于某些文本,它没有被自动换行以适应屏幕,而对于其他文本,它是自动换行的,但这是一个不同的问题)。当我在那一行上放置断点时,文本是always文字包裹的。当我禁用/删除断点时,通常不会自动换行(它是确定性的)的文本不会自动换行。

这对我来说没有多大意义。我见过这个问题 https://stackoverflow.com/questions/4166269/why-does-setting-a-breakpoint-make-my-code-work,我理解其背后的原因,但我不明白为什么这会成为这里的问题。有人能解释一下吗?我正在设备上进行测试,看看这是否有什么不同。


Edit:事实证明这是一种竞争条件,现在我只需要弄清楚如何解决它......显然我只能选择一个“正确”答案,但感谢大家的有用评论:)


像这样的事情是有时/经常竞争条件的标志。

设置断点可以消除竞争(例如,通过稍后运行来覆盖该值的“流氓”线程现在在捕获断点时已完成)。

或者这是一个明确的案例海森巴格 http://en.wikipedia.org/wiki/Unusual_software_bug#Heisenbug :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java/Eclipse 中,为什么在代码中设置断点会改变该语句的效果? 的相关文章

随机推荐