2014-06-23 14 views
2

我有一個Java程序,在某些時候最終創建一個與「schema.sql」匹配的字符串。我想在源代碼中找到這種情況。在源代碼中搜索「schema.sql」不會產生位置。相反,程序必須在運行時創建字符串。我只是不知道在哪裏。它發生在我的項目的某個庫中。我怎樣才能找到我的程序創建這個字符串的位置?運行時堆分析;什麼時候是一個匹配模式的字符串初始化

我可以在運行時以某種方式觀察堆是否與「schema.sql」匹配的字符串?我查看了像VisualVM這樣的東西,但它看起來只是分析堆轉儲,而不是堆的運行狀態。必須有辦法做到這一點;有任何想法嗎?

+0

你爲什麼要這麼做? –

+0

爲什麼你確定你的字符串是「schema.sql」? –

+0

@ElliottFrisch我在我的項目上有一個庫,它在我的類路徑上執行SQL腳本,標題爲「schema.sql」。它會遵循該庫可能構造一些字符串,指定此文件的路徑。該字符串將被'「schema.sql」'匹配。事實上,我在運行時在調試時發現它,而字符串是''classpath *:schema-all.sql,classpath *:schema.sql「'。基本上,我希望有一個增強的條件斷點來分析程序中的所有字符串,而不僅僅是'x ==「foo」'。 – dgtc

回答

2

你可以做到這一點與JProfiler有以下步驟:

1)通過配置會話啓動對話框適當比例分配的錄像配置文件在啓動時開始分配記錄。

enter image description here

2)採取堆快照後,你認爲該字符串已創建

3)在堆遍歷的類視圖上java.lang.String行雙擊創建新對象設置與所有字符串

4)切換到「傳出引用查看」

5)通過選擇搜索您的字符串「應用過濾器 - >通過限制選擇的值」,並進入STRI納克值

enter image description here

6)切換到分配視圖,並檢查了堆棧跟蹤

enter image description here

聲明:我的公司開發的JProfiler。

相關問題