2014-07-15 15 views
3

有沒有辦法在IntelliJ IDEA設置一個斷點在設置方法是由產生龍目島如何在使用Lombok生成的IntelliJ IDEA中的setter方法中設置斷點?

這對於某些調試場景非常有用,例如,以查看何時從像Hibernate這樣的框架調用setter。

實際上,生成的setter方法顯示在IntelliJ IDEA(正在使用的Lombok插件)的結構視圖中。但是我還沒有找到通過上下文菜單或其他設置來設置斷點的方法。

回答

4

在我的理解中你不能這樣做,因爲lombok正在突變你的字節碼,使突變的代碼沒有自動生成的部分的行號。

這樣做的目的是讓您的源代碼行始終與您的字節碼匹配。它們不匹配,當你將斷點放在一行上但是執行沒有停止或停止在其他地方(因爲行號不匹配),你可能會陷入困境。但是作爲交換,Lombok失去了調試生成代碼的能力(不能在沒有行號的行上放置斷點)。您必須依賴生成的代碼正確的事實。

+0

謝謝。這似乎是一個合理的解釋。關於調試Lombok生成的代碼:我不懷疑這段代碼是正確的。但是,如果我能夠在調試器中停止調用Lombok getter的時候,它會使調用代碼的調試變得更容易 - 尤其是當這些類從像Hibernate這樣的框架中調用時。 – rmoestl

+0

您可以使用delombok生成類似於lombok在代碼中使用的代碼的java代碼,並在生成的代碼中設置斷點。 –

0

在結構視圖中選擇setter並右鍵單擊。彈出菜單包含一個菜單項「切換方法斷點」(您可以在類中的默認構造函數中設置一個斷點,但沒有默認構造函數,它的java代碼)

+3

感謝您的回答。不幸的是,這對龍目島生成的方法不起作用 - 至少對我而言。雖然普通「手寫」Java方法的方法斷點在IDEA的斷點對話框中列出,但對於Lombok生成的方法,這不是真的。 – rmoestl

7

作爲解決方法,您可以使用Java Field Watchpoint。在這種情況下,每次訪問/修改該字段都會導致一箇中斷點。

這種方法的缺點是在您直接訪問/修改字段或使用getter/setter方法時,都會發生線程掛起。

但是,當您使用setter方法捕獲斷點時,IDEA還會在「變量」窗口中顯示一個參數(與用於觀察點的字段名稱相同),並且斷點不會顯示在字段的行中,而是顯示在班級'線。

Setter Break point

下面的簡短說明,如何創建一個場監測點,從https://www.jetbrains.com/idea/help/creating-field-watchpoints.html複製:

  1. 在主菜單,選擇運行|查看斷點,或按Ctrl + Shift + F8。
  2. 在打開的斷點對話框中,單擊添加(加號圖標)按鈕。
  3. 選擇字段從下拉列表中觀察點:「Java的現場觀察點」
  4. 在打開的添加字段觀察點對話框,指定以下內容:包含所需場一類的
    完全限定名稱。您可以手動鍵入它,或單擊瀏覽按鈕,然後按名稱或從項目中找到所需的類。
    字段名稱。您可以手動鍵入它,或者單擊瀏覽按鈕,然後從所選班級的字段列表中選擇所需的字段。
  5. 此外,您還可以設置其他選項,如現場訪問(吸氣)或現場修飾(setter方法)
0

斷點隱funcions工作。 delombok功能允許生成隱式實現(調試後,您可以/應該恢復未婚夫的變化)。爲了使隱性實現只是在類名稱上點擊右鍵並選擇以下菜單行:

enter image description here

相關問題