2008-09-19 36 views

回答

1

過程中的錯誤提供了儘可能多的信息可能是一件好事,對吧?

幫助追蹤錯誤。

編輯:(是)

-1

你扔NullPointerException?我想你應該在代碼中做null驗證。 我也會考慮使用開源記錄工具,如Log4J

2

這取決於。如果你得到堆棧跟蹤,很明顯什麼類拋出異常。這通常會導致確保你的環境會在沒有出現異常時給你堆棧跟蹤。

+2

堆棧跟蹤通常只給你的行號,所以如果一個以上的對象是在該行引用你仍然不知道導致異常 – Thomas 2008-09-19 04:33:46

0

是的,這將是有益的。特別是如果您有一種機制,屏幕上顯示錯誤消息(exception.getMessage()),但實際的堆棧跟蹤會隱藏在您無法立即訪問的日誌文件中。

0

不,我不認爲這完全是「有用的」。

相反,你應該小心不要把NPE放在第一位。在使用它們之前檢查您的值(null驗證)等。這應該發生在之前您調用庫方法和之後您得到的結果(如果API指定該方法可能會返回null。當然,有時它會這樣做,但這是一個錯誤)。

如果您認爲NPE應該攜帶此信息進行調試,請再考慮一下。這是調試器的優點。一個例外就是告訴你出了什麼問題。請記住,未經檢查的異常在運行時發生 - 必須在那裏生成。爲了知道哪個變量包含null字節代碼必須知道變量名稱。你不想用這樣的東西來膨脹你的字節碼。類名包含在我從我的程序中收到的每個日誌輸出中。這就是日誌記錄的好處。

Java通過爲您提供行號和完整堆棧跟蹤,已經大大簡化了調試過程。 C程序因Segmentation fault而失敗。您必須使用strace或調試器才能獲得如此多的信息。

注意javac確實包括編譯時間選項,在編譯時包含的源文件的信息,但是這是爲了通過一個調試器一起使用,是拋出隨機例外。引用孫的javac手冊頁:

 
      -g Generate all debugging information, including local variables. 
       By default, only line number and source file information is 
       generated. 

      -g:none 
       Do not generate any debugging information. 

      -g:{keyword list} 
       Generate only some kinds of debugging information, specified 
       by a comma separated list of keywords. Valid keywords are: 

       source
Source file debugging information lines Line number debugging information vars Local variable debugging information

長話短說:使用調試器。

+2

在生產中具有難以複製的問題,實在不是一個好選項。 – 2008-10-14 17:06:51

相關問題