2011-05-06 78 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