有沒有辦法在IntelliJ IDEA設置一個斷點在設置方法是由產生龍目島?如何在使用Lombok生成的IntelliJ IDEA中的setter方法中設置斷點?
這對於某些調試場景非常有用,例如,以查看何時從像Hibernate這樣的框架調用setter。
實際上,生成的setter方法顯示在IntelliJ IDEA(正在使用的Lombok插件)的結構視圖中。但是我還沒有找到通過上下文菜單或其他設置來設置斷點的方法。
有沒有辦法在IntelliJ IDEA設置一個斷點在設置方法是由產生龍目島?如何在使用Lombok生成的IntelliJ IDEA中的setter方法中設置斷點?
這對於某些調試場景非常有用,例如,以查看何時從像Hibernate這樣的框架調用setter。
實際上,生成的setter方法顯示在IntelliJ IDEA(正在使用的Lombok插件)的結構視圖中。但是我還沒有找到通過上下文菜單或其他設置來設置斷點的方法。
在我的理解中你不能這樣做,因爲lombok正在突變你的字節碼,使突變的代碼沒有自動生成的部分的行號。
這樣做的目的是讓您的源代碼行始終與您的字節碼匹配。它們不匹配,當你將斷點放在一行上但是執行沒有停止或停止在其他地方(因爲行號不匹配),你可能會陷入困境。但是作爲交換,Lombok失去了調試生成代碼的能力(不能在沒有行號的行上放置斷點)。您必須依賴生成的代碼正確的事實。
在結構視圖中選擇setter並右鍵單擊。彈出菜單包含一個菜單項「切換方法斷點」(您可以在類中的默認構造函數中設置一個斷點,但沒有默認構造函數,它的java代碼)
感謝您的回答。不幸的是,這對龍目島生成的方法不起作用 - 至少對我而言。雖然普通「手寫」Java方法的方法斷點在IDEA的斷點對話框中列出,但對於Lombok生成的方法,這不是真的。 – rmoestl
作爲解決方法,您可以使用Java Field Watchpoint。在這種情況下,每次訪問/修改該字段都會導致一箇中斷點。
這種方法的缺點是在您直接訪問/修改字段或使用getter/setter方法時,都會發生線程掛起。
但是,當您使用setter方法捕獲斷點時,IDEA還會在「變量」窗口中顯示一個參數(與用於觀察點的字段名稱相同),並且斷點不會顯示在字段的行中,而是顯示在班級'線。
下面的簡短說明,如何創建一個場監測點,從https://www.jetbrains.com/idea/help/creating-field-watchpoints.html複製:
謝謝。這似乎是一個合理的解釋。關於調試Lombok生成的代碼:我不懷疑這段代碼是正確的。但是,如果我能夠在調試器中停止調用Lombok getter的時候,它會使調用代碼的調試變得更容易 - 尤其是當這些類從像Hibernate這樣的框架中調用時。 – rmoestl
您可以使用delombok生成類似於lombok在代碼中使用的代碼的java代碼,並在生成的代碼中設置斷點。 –