我有一个用Eclipse Memory Analyzer打开的转储。
我想将堆的一些内容导出到文件中。
我感兴趣的其中一个字段是ArrayList
,我找不到一种方法来查询转储,其方式是将数组列表的内容返回为输出:
选择ArrayList对象本身会返回如下内容:
java.util.ArrayList [id=0xf2765680]
选择内的数组
数组列表(select arr.elementData...
)返回类似于:
java.lang.Object[] [id=0xf2765698;length=4]
当arrayList不为null时,选择toString(arr)
或toString(arr.elementData)
会返回空字符串(如果是,则选择字符串null
)。
这真的不可能吗?
答案 0 :(得分:3)
获取元素列表
SELECT OBJECTS arr.@referenceArray FROM OBJECTS <your_array_address> arr
重新映射数组元素列表
SELECT OBJECTS elem.<field_name> FROM OBJECTS (SELECT OBJECTS arr.@referenceArray FROM OBJECTS <your_array_address> arr) elem
真实示例
SELECT OBJECTS elem.callable.task.task FROM OBJECTS (SELECT OBJECTS arr.@referenceArray FROM OBJECTS 0x645eb6b80 arr) elem
答案 1 :(得分:0)
我今天遇到了同样的问题。我找不到使用OQL的方法,但我确实找到了使用Eclipse Memory Analyzer本身的方法。
选择要导出的数据的父对象。您的收藏集现在应显示在屏幕左侧的“属性”标签中。
右键单击“属性”列表中的集合,然后选择复制 - 将值保存到文件或复制 - 值。
如果选择将值保存到文件,请指定文件位置。集合的内容将输出到文件中。
或者,似乎有一个选项可以提取列表中的值。
我没有尝试过第二个选项,但我希望这可以帮助您或其他任何人搜索此主题。