簡體   English   中英

如何在使用 Lombok 生成的 IntelliJ IDEA 中的 setter 方法中設置斷點?

[英]How to set a breakpoint in a setter method in IntelliJ IDEA that is generated with Lombok?

IntelliJ IDEA 中有沒有辦法在Lombok生成的 setter 方法中設置斷點

這在某些調試場景中非常有用,例如查看何時從 Hibernate 等框架調用 setter。

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

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

這種方法的缺點是在您直接訪問/修改字段或使用 getter/setter 方法時都會導致線程暫停。

但是,當您使用 setter 方法捕獲斷點時,IDEA 還會在“變量”窗口中顯示一個參數(與用於觀察點的字段同名),並且斷點不在字段行中顯示,而是在類行中顯示.

Setter 斷點

以下簡短說明,如何創建現場觀察點,復制自https://www.jetbrains.com/idea/help/creating-field-watchpoints.html

  1. 在主菜單上,選擇運行 | 查看斷點,或按 Ctrl+Shift+F8。
  2. 在打開的 Breakpoints 對話框中,單擊添加(加號圖標)按鈕。
  3. 從下拉列表中選擇 Field Watchpoint:“Java Field Watchpoints”
  4. 在打開的添加字段觀察點對話框中,指定以下內容:
    包含所需字段的類的完全限定名稱 可以手動輸入,也可以點擊瀏覽按鈕,通過名稱查找需要的類,或者從項目中查找。
    字段名稱 您可以手動輸入,或單擊瀏覽按鈕並從所選類的字段列表中選擇所需的字段。
  5. 此外,您可以設置其他選項,如字段訪問(對於 getter)或字段修改(對於 setter)

根據我的理解,你不能這樣做,因為 lombok 正在以一種變異代碼沒有自動生成部分的行號的方式改變你的字節碼。

這樣做是為了讓您的源代碼行始終與您的字節碼相匹配。 如果它們不匹配,當您將斷點放置在一行上但執行沒有停止或在其他地方停止(因為行號不匹配)時,您可能會陷入困境。

但作為交換,Lombok 失去了調試生成代碼的能力(你不能在沒有行號的行上放置斷點)。 您必須依賴生成的代碼是正確的事實。

斷點適用於隱式函數。 delombok功能允許生成隱式實現(調試后您可以/應該恢復首次更改)。 要進行隱式實現,只需右鍵單擊類名並選擇以下菜單行:

在此處輸入圖片說明

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

我贏了:

  • 運行 -> 查看斷點(或 Ctrl+Shift+F8)
  • 單擊“+”(或 Alt+Ins)
  • 選擇'1。 Java方法斷點'
  • 要么痛苦地輸入完全限定的類名,要么輸入諸如“*.MyClass”之類的模式
  • 輸入方法名稱
  • 單擊確定

只花了我 6 年 :-)

在 Eclipse 上:右鍵單擊類大綱或類型層次結構中的方法,然后選擇“切換方法斷點”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM