哪个调试工具可以列出内部化的字符串?
2022-09-02 11:02:04
我正在寻找一个可以列出已内部化的字符串的调试工具?理想情况下,我想放一个标记,并有一个在该标记之后添加的字符串列表。
提前致谢。
我正在寻找一个可以列出已内部化的字符串的调试工具?理想情况下,我想放一个标记,并有一个在该标记之后添加的字符串列表。
提前致谢。
也许最简单的方法是使用字节码查看器。任何暂存的字符串都将出现在包含 String 文本的类文件的constant_pool中。例如,在我回答的另一个StackOverflow问题的最新类文件中,我的代码中有以下字符串文本:.这在常量池中显示为一种类型。我使用的字节码查看器(和编辑器,所以要小心!)是JBE。新浪网下载"sun.awt.noerasebackground"
'String_info'
在最近的 Hotspot VM 上,插入的字符串看起来就像任何其他字符串一样 - 唯一的区别是底层 char 数组正在被 VM 跟踪(我认为它有一个额外的 JNI 引用,但它不会显示在 YourKit 转储上 - 调查起来会很有趣)。
也就是说,Yourkit为重复的字符串提供了内存检查,我相信这可以满足您的需求。如果将其与“跟踪分配”结合使用,则可以直接访问分配这些字符串的代码。
查看 http://www.yourkit.com/docs/95/help/inspections_mem.jsp#duplicate_strings
--
获取在两个时间点之间添加的字符串列表更容易:
应该与任何分析器甚至jhat一起使用(如果您有足够的耐心)。如果您使用 YourKit,则可以使用书签功能,并且只能拍摄一个堆快照。