我調試了我的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