2011-05-06 80 views
0

我调试了我的java代码。它没有给出任何错误。但是当我执行它(它也没有给出错误,但是)代码没有成功终止。这很有趣。但是,这甚至可能吗?调试执行冒险

+2

这通常是由于'toString'方法中的副作用。 – 2011-05-06 11:45:54

+0

我的代码中没有使用任何tostring()方法 – hari 2011-05-06 11:47:11

+2

如果代码在语法上是正确的,则这是可能的。从JVM的角度来看,一切都很好,尽管你的逻辑可能不正确。它显然是正确执行代码,但由于逻辑有缺陷,它没有达到你的预期......如果你能显示你的代码会好得多。 – gruntled 2011-05-06 11:48:24

回答

1

当然,调试器引入的减速确实会掩盖一些竞争条件,但这通常只适用于多线程或网络代码。

1

是的,可能代码在调试时工作,在运行时不起作用。我能想到的两个可能的原因,现在是

  • 并发多线程的情况下:如果你的调试器在断点处停止,多个线程之间的时间可以改变可以影响行为
  • 调试时,可以触发代码多次的某些部分,例如像通过toString方法或通过操作的方式检查或具有一些监视表达式配置
1

是(更多时,它已经无需调试执行比),代码可以是语法正确(并且因此可能没有任何错误地运行),但是可能在语义上不合格等。

假设如下:

public int add(int operand1, int operand2) 
{ 
    return operant1 - operand2; 
} 

这没有错误运行,但仍然是不正确的,由于逻辑/执行错误。

因此,有可能通过顺利运行的代码获得错误的结果。

+0

但不是调试的主要目的是找出甚至逻辑错误,以了解执行的流程呢? – hari 2011-05-06 12:14:34

+0

是的,你调试发现逻辑错误,但你的成功取决于你如何调试和遵循程序流程。然而,正如其他人已经指出的那样,如果您有多个进程同时运行(根据您的代码,这似乎就是这种情况),调试可能会掩盖赛车状况,因为它会减慢甚至停止执行线程。 – Thomas 2011-05-06 12:46:13