我有一个Java程序,该程序最终会创建一个与“ schema.sql”匹配的字符串。我想找到发生在源代码中的位置。在源代码上搜索“ schema.sql”不会得到该位置。相反,程序必须在运行时创建字符串。我只是不知道在哪里。它发生在我项目的某个库中。如何找到我的程序在哪里创建此字符串?
我可以在运行时以某种方式监视堆中是否有与“ schema.sql”匹配的字符串吗?我看着类似VisualVM的东西,但看起来它只分析堆转储,而不分析堆的运行状态。必须有一种方法可以做到这一点;有任何想法吗?
最佳答案
您可以使用JProfiler通过以下步骤进行操作:
1)通过在会话启动对话框中配置适当的分配记录配置文件,在启动时开始分配记录。
2)认为已经创建了字符串后,请进行堆快照
3)在堆浏览器的类视图中双击java.lang.String
行,以创建一个包含所有字符串的新对象集
4)切换到“外向参考视图”
5)通过选择“应用过滤器->通过限制所选值”并输入字符串值来搜索您的字符串
6)切换到分配视图,并检查堆栈跟踪
免责声明:我的公司开发JProfiler。