我调试了我的java代码。它没有给出任何错误。但是当我执行它(它也没有给出错误,但是)代码没有成功终止。这很有趣。但是,这甚至可能吗?调试执行冒险
Q
调试执行冒险
0
A
回答
1
当然,调试器引入的减速确实会掩盖一些竞争条件,但这通常只适用于多线程或网络代码。
1
是的,可能代码在调试时工作,在运行时不起作用。我能想到的两个可能的原因,现在是
- 并发多线程的情况下:如果你的调试器在断点处停止,多个线程之间的时间可以改变可以影响行为
- 调试时,可以触发代码多次的某些部分,例如像通过toString方法或通过操作的方式检查或具有一些监视表达式配置
1
是(更多时,它已经无需调试执行比),代码可以是语法正确(并且因此可能没有任何错误地运行),但是可能在语义上不合格等。
假设如下:
public int add(int operand1, int operand2)
{
return operant1 - operand2;
}
这没有错误运行,但仍然是不正确的,由于逻辑/执行错误。
因此,有可能通过顺利运行的代码获得错误的结果。
这通常是由于'toString'方法中的副作用。 – 2011-05-06 11:45:54
我的代码中没有使用任何tostring()方法 – hari 2011-05-06 11:47:11
如果代码在语法上是正确的,则这是可能的。从JVM的角度来看,一切都很好,尽管你的逻辑可能不正确。它显然是正确执行代码,但由于逻辑有缺陷,它没有达到你的预期......如果你能显示你的代码会好得多。 – gruntled 2011-05-06 11:48:24