java 断点_每个Java开发人员应拥有的持久断点
java 斷點(diǎn)
當(dāng)開發(fā)人員使用Java進(jìn)行工作時,即使您嘗試調(diào)試其他內(nèi)容,也總是會遇到一些失敗的情況。 這是應(yīng)該在每個IDE中啟用的持久斷點(diǎn)的列表。 (恕我直言)
是的,從理論上講,您應(yīng)該能夠從良好的日志記錄實(shí)現(xiàn)中獲得此信息。 但是這些問題通常是由于無法控制的更改而在其他人的庫中深層隱患……或隱藏在大量當(dāng)前正在執(zhí)行的線程中。 如今,Java在調(diào)試模式下運(yùn)行沒有太多開銷,通常,在沒有附加調(diào)試器的情況下,我永遠(yuǎn)不會運(yùn)行我正在處理的任何事情,因?yàn)镠otSwap可以大大提高生產(chǎn)率。
我很想知道其他人必須有斷點(diǎn)。 它們應(yīng)該是您永遠(yuǎn)想知道的故障,這些故障永遠(yuǎn)不會出現(xiàn)在應(yīng)用程序的正常運(yùn)行中。
死鎖檢測
VM在識別來自低級Java合約的死鎖方面越來越好,調(diào)試器應(yīng)該可以選擇打破死鎖。 您應(yīng)該確保默認(rèn)情況下將其打開。
在java.lang.ExceptionInInitializer上
進(jìn)行跟蹤可能是一件很痛苦的事情,因?yàn)樵诟畹囊粚铀赡軙兂蒀lassNotFoundException,并且通常,如果下降了多個級別,則沒有明顯的原因可以使間接引用類無法加載。
通常是由于人們使用引發(fā)RuntimeExceptions的方法/構(gòu)造函數(shù)初始化公共/最終/靜態(tài)變量。 如果不確定使用具有正確錯誤處理的static {}塊,請不要在其中執(zhí)行依賴于當(dāng)前jar文件外部內(nèi)容的操作。
在java.lang.NoClassDefFoundError上
在OSGi中工作時總是很流行,通常您忘記了一個依賴的jar文件,并且看到這種類型的故障。 有趣的是,有時您只會在特定類的第一次拋出此異常時才找到原因。 因此,如果您有斷點(diǎn),則可以更快地進(jìn)行跟蹤。
我發(fā)現(xiàn)有時在某些反射代碼后面沒有遇到斷點(diǎn)。 在那種情況下,我經(jīng)常在此類的構(gòu)造函數(shù)中有斷點(diǎn)以確保。
在java.lang.NoSuchMethodError上
如果您在本地未正確構(gòu)建,或者您使用的是錯配版本的庫,那么您當(dāng)然通常會看到此信息。 您總是想知道這一點(diǎn)。
在java.lang.LinkageError上
通常只有在情況確實(shí)變糟時才出現(xiàn)這種情況,例如,當(dāng)您掛起同一個類的兩個版本,即使它們來自同一個jar文件時。 (必須愛多級裝載機(jī))值得慶幸的是,這些裝載機(jī)不會經(jīng)常出現(xiàn),通常是在我已經(jīng)非常頭痛的時候進(jìn)行。
關(guān)于java.lang.OutOfMemoryError / java.lang.StackOverflowException
如果您很幸運(yùn),VM會為此中斷。 但是不幸的是,由于很多時間會發(fā)生在本機(jī)代碼中,因此您只需要處理這些后果。
為后者獲取完整的堆棧有點(diǎn)麻煩。 但并非不可能。 有關(guān)獲取完整堆棧跟蹤的信息,請參見此較早的文章。
在java.lang.AssertionError上
數(shù)量驚人的人使用斷言,然后在調(diào)試或運(yùn)行測試時抱怨異常時感到不高興。 (您正在使用-ea執(zhí)行此操作,對嗎?)
缺點(diǎn)是您想在調(diào)試某些測試框架時將其關(guān)閉,我正在查看您的JUnit,因?yàn)楫?dāng)您只想運(yùn)行所有測試時碰到斷點(diǎn)并沒有完全幫助。
最后,我會不時地遍歷以下代碼,這將導(dǎo)致一個異常,僅用于測試是否啟用了斷言。
boolean assertionsEnabled = false;try{ assert false; }catch (AssertionException ae){ assertionsEnabled = true }更新:一位樂于助人的同事指出,我應(yīng)該就應(yīng)替換此代碼提供一些替代建議。 第一種選擇是調(diào)用Class.desiredAssertionStatus,但如果要完全確定,可以使用以下代碼,該代碼使用賦值來捕獲斷言狀態(tài)而不會引發(fā)異常。
boolean assertionsEnabled = false;assert isAssertionsEnabled = true; 參考: Gerard Davison博客博客中, 每個Java開發(fā)人員都應(yīng)從我們的JCG合作伙伴 Gerard Davison獲得持久性斷點(diǎn) 。翻譯自: https://www.javacodegeeks.com/2013/05/persistent-breakpoints-every-java-developer-should-have.html
java 斷點(diǎn)
總結(jié)
以上是生活随笔為你收集整理的java 断点_每个Java开发人员应拥有的持久断点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac怎么投屏到电视或者投影仪电脑视频如
- 下一篇: Java 8:长期支持的堡垒