3

我愿意将StringBuilder带有索引的大值写入827磁盘。我正在尝试使用以下 OQL 来做到这一点:

map(heap.objects('java.lang.StringBuilder'),
 function(it, index) {
  if (index == 827.0) {
      var writer = new java.io.FileWriter("/Users/username/output/sb_0x" + it.id.toString(16) + ".txt");
      var chars = it.value;
      for (var i = 0; i < chars.length; i++) {
          writer.write(chars[i]);
      }
      writer.close();
  }
  return index;
})

但是,什么都没有写。我现在知道构建器存在,因为我已经检查过它:

所有 StringBuilder 对象

似乎结果在带有索引的构建器之后被截断99(即它适用于 99,但不适用于 100):

100 后截断

有什么建议如何获得 ID 为 827 的 StringBuilder 的值?

4

1 回答 1

2

您可以使用以下查询:

filter(heap.objects('java.lang.StringBuilder'),
 function(it, index) {
  if (index == 827.0) {
      var writer = new java.io.FileWriter("/Users/username/output/sb_0x" + it.id.toString(16) + ".txt");
      var chars = it.value;
      for (var i = 0; i < chars.length; i++) {
          writer.write(chars[i]);
      }
      writer.close();
      return true;
  }
  return false;
})
于 2018-01-23T07:59:51.130 回答