Eclipse内存分析器中的OQL - 如何显示数组/ ArrayList内容

时间:2014-08-02 21:41:29

标签: java eclipse oql

我有一个用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)。

这真的不可能吗?

2 个答案:

答案 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本身的方法。

  1. 选择要导出的数据的父对象。您的收藏集现在应显示在屏幕左侧的“属性”标签中。

  2. 右键单击“属性”列表中的集合,然后选择复制 - 将值保存到文件复制 - 值

  3. 如果选择将值保存到文件,请指定文件位置。集合的内容将输出到文件中。

  4. 或者,似乎有一个选项可以提取列表中的值。

    1. 右键单击列表。
    2. 选择 Java集合 - 提取列表值
    3. 我没有尝试过第二个选项,但我希望这可以帮助您或其他任何人搜索此主题。