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