【问题标题】:How to display array length in Eclipse debugger?如何在 Eclipse 调试器中显示数组长度?
【发布时间】:2015-09-16 07:54:40
【问题描述】:

在 Eclipse 中调试 java 程序时,我可以看到(例如在变量视图中)任意数组的内容,见下图(带有ByteArrayInputStream.buf 字段)。

但我在任何地方都找不到 array length 字段。有没有办法在 Eclipse 调试器中显示数组的长度?我该怎么做?

【问题讨论】:

  • 最新的数组段(例如[500..599])保存长度。
  • 你也可以在Expression Tab中查看长度,只需添加array.length array.size()等。

标签: java arrays eclipse debugging


【解决方案1】:

您可以使用“表达式”视图并评估length 成员:

请记住,最后一个索引比长度小一!

虽然这适用于 public 数组成员,但似乎受保护成员需要显式强制转换。考虑以下代码:

...
ByteArrayInputStream is = new ByteArrayInputStream(new byte[1769]);
...

现在,在评估 is.buf 时,表达式视图会显示问题中所示的数组转储,但评估 is.buf.length 失败并显示 <error(s)_during_the_evaluation>。如果我们向ByteArrayInputStream 添加显式转换,则评估有效:

【讨论】:

  • 但它不适用于 privateprotected 字段,例如我的情况:is.buf.length。 Eclipse 打印:<error(s)_during_the_evaluation> buf cannot be resolved or is not a field
  • 啊哈问题实际上是错误的类型 (InputStream)。这个炒锅就好了:((ByteArrayInputStream) is).buf.length
  • 好观察!不知道为什么表达式评估器需要在这里显式转换(因为它已经知道 buf 是一个数组),但我可以完全重现你所说的......
【解决方案2】:

感谢@ThorbjørnRavnAndersen 的回答(评论)。你是对的,最新的数组段(在我的例子中:[1700..1768])保持长度。

全图:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多