我有一个Java程序,该程序最终会创建一个与“ schema.sql”匹配的字符串。我想找到发生在源代码中的位置。在源代码上搜索“ schema.sql”不会得到该位置。相反,程序必须在运行时创建字符串。我只是不知道在哪里。它发生在我项目的某个库中。如何找到我的程序在哪里创建此字符串?

我可以在运行时以某种方式监视堆中是否有与“ schema.sql”匹配的字符串吗?我看着类似VisualVM的东西,但看起来它只分析堆转储,而不分析堆的运行状态。必须有一种方法可以做到这一点;有任何想法吗?

最佳答案

您可以使用JProfiler通过以下步骤进行操作:

1)通过在会话启动对话框中配置适当的分配记录配置文件,在启动时开始分配记录。



2)认为已经创建了字符串后,请进行堆快照

3)在堆浏览器的类视图中双击java.lang.String行,以创建一个包含所有字符串的新对象集

4)切换到“外向参考视图”

5)通过选择“应用过滤器->通过限制所选值”并输入字符串值来搜索您的字符串



6)切换到分配视图,并检查堆栈跟踪



免责声明:我的公司开发JProfiler。

07-28 03:18
查看更多