1
我在應用程序中遇到了一些奇怪的文本格式,我需要找到原因。問題是我不知道從哪裏開始尋找我們的遺留代碼。
是否可以讓IntelliJ IDEA調試器在整個JVM應用程序的整個實例中搜索一個值?與通常情況下設置斷點的方式不同。使用IntelliJ IDEA調試器在運行時搜索整個JVM以獲取價值
我在應用程序中遇到了一些奇怪的文本格式,我需要找到原因。問題是我不知道從哪裏開始尋找我們的遺留代碼。
是否可以讓IntelliJ IDEA調試器在整個JVM應用程序的整個實例中搜索一個值?與通常情況下設置斷點的方式不同。使用IntelliJ IDEA調試器在運行時搜索整個JVM以獲取價值
從this question的評論來看,IntelliJ中沒有這樣的功能。
然而,您可以嘗試執行堆轉儲,然後使用OQL進行搜索。它可以在VisualVM工具,它是捆綁在一起的JDK來完成:
jvisualvm
命令(假設你的JDK的bin
文件夾中PATH
)。前往OQL控制檯查看。在查詢編輯器,鍵入您的查詢,例如:
select s from java.lang.String s where s.toString().contains("hello")
並執行它。
這應該讓你更接近你的對象被使用的類/對象。
有一些棘手的部分:
堆轉儲分析的另一個工具是Eclipse Memory Analyzer (MAT)。 (針對您的使用案例,在分析堆轉儲之前啓用保留無法訪問的對象選項。)
您提到您需要在運行時搜索該值。但是,如果您懷疑要查找的是字符串文字,請嘗試按照this answer中所述搜索應用程序的JAR。
我不明白你的意思是「尋找價值」。你的意思是堆在堆棧裏嗎?最初,因爲你在談論格式化,我以爲你在談論代碼。 – ProgrammersBlock
您可以爲「任何異常」設置斷點(CTRL + SHIFT + F8),它會在引發異常時設置斷點,還可以添加條件以迭代範圍(「this」)變量並檢查類型(我假定String in這種情況下)和價值 – IddoE