在Eclipse中调试时查看完整的字符串


166

在调试Java代码时,视图“ Variables”和“ Expressions”中的字符串仅显示到一定长度,此后Eclipse显示“ ...”。

有什么办法检查整个字符串吗?(这减轻了添加日志语句以进行调试的痛苦)


您在哪里看到这种行为?调试器的哪一部分?
skaffman 2010年

附带说明一下,这可能是一个误称,因为它可能对您不起作用,但是如果您使用java.util.logging或log4j之类的调试库,则可以轻松地将调试语句(具有不同的调试级别)转换为打印输出或日志文件,它可能给您带来在调试窗口中筛选字符串可能无法获得的优势。只是一个想法=)
corsiKa

Answers:


225

在“变量”视图中,可以右键单击“详细信息”窗格(显示字符串内容的部分),然后选择“最大长度...”弹出菜单。相同的长度适用于表达式检查器弹出窗口以及其他几个地方。

在此处输入图片说明


17
比所选方法更好的解决方案。谢谢!
科林2013年

13
值得指出的是,“详细信息窗格”是显示字符串内容的部分。
Bnrdo 2014年

1
如何在Eclipse Kepler中执行此操作?请帮助
愚蠢的2014年

1
好消息是,当将鼠标悬停在变量上,在“检查”窗口或“表达式”视图中检查并在“显示”视图中显示值时,此更改似乎也会影响显示的长度。
史蒂夫·钱伯斯

1
我已经更新了正确的解决方案(较早接受的解决方案是真正的Eclipse旧版本的唯一解决方案)。
ragebiswas

134

在“ 变量”视图中,右键单击变量,然后选择“ 更改值”。如果变量很大,则必须等待几分钟(在这种情况下Eclipse不响应命令),但最终Eclipse将完整显示变量。


2
我只能看到"data:image/bitmap;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQE... (length: 22869)"。设置“最大长度”选项不起作用,并且也设置“更改值”。
falko 2014年

@falko“ Max Length”对我不起作用,“ Change value”没问题(在等待几秒钟后,具体取决于变量长度)。
Umberto 2014年

至少在我的系统上,这是明显慢于增加“最大长度”(见其他答案)。
sleske 2015年

日食是不是你的想法很开心..香港专业教育学院尝试这样做,因为我30分钟等待现在,月食.. Buuut的任何反应:这似乎工作;)
Joshit

22

如果您的字符串很长,我可以使用另一种策略:将其转储到文件中。我在“显示”视图中使用了一段代码,该代码经过评估可以将数据转储到文件中。我使用Commons IO,但是您可以使用仅JDK方法。

org.apache.commons.io.FileUtils.writeStringToFile(new java.io.File("<filename>"), <expression to evaluate>);

当然,您需要在类路径中使用Commons IO JAR才能正常工作。如果您不这样做,请诉诸JDK。


5
不错的解决方法。我个人将这个答案作为最佳答案。注意:必须为运行JVM的系统定义<文件名>,如果您要进行远程调试,则有所不同,在这种情况下,文件将写入远程系统,而不是运行eclipse的工作站上。 。
rexford

18

从eclipse调试视图中查看String值的最佳方法如下。

1)切换到Eclipse中的调试视图

2)在变量窗格中选择所需的变量。

3)右键单击显示值的变量窗格的显示区域,然后单击最大长度。在“配置详细信息窗格”中输入最大字符值。

4)干杯

在此处输入图片说明


1
这种图形化的解释确实很有帮助。+1
Bhavin Shah

3

当调试器到达需要String值的位置时,只需键入sysOut语句

System.out.println("The value is : \n " + query);

选择上面的语句,右键单击->执行

它将在控制台上打印值


0

对于基于Eclipse的基于javascript的调试,“更改值”方法和“最大长度”方法均对我失败,将所需的对象添加到watch(Expressions),然后右键单击监视的表达式以选择“ Load Full Value”是唯一的解决方案适用于我,但即使这样也会在输出中插入不需要的“ \ n”

注意 -必须设置“最大长度”,才能使“加载完整值”加载值直到最大长度(eclipse中的默认值为10000)。请参考以上答案,以了解如何设置最大长度。


0

Eclipse火星中没有“ maxLength”。并且,“更改值”仅适用于“变量”,而不适用于“表达式”,因此以上内容都不适合我。

在此处输入图片说明

并且,该表达式在中间而不是在结尾处被切掉。我猜他们改变了默认行为。

对我来说唯一有效的方法是扩展表达式名称列的宽度,然后单击表达式以将其全部选中以查看全长内容。


0

此外,以上内容对我无济于事,但如上所述,找不到Eclipse中的某些用户界面元素。我正在使用STS 4.3.1。

我需要的值确实很大,它是一个巨大的JSON请求的一部分。解决方法是在Eclipse Debug Shell控制台中使用表达式,然后输出整个值的子字符串。由于您可以看到部分值,因此请检查它并使用最后几个文字作为输出字符串的下一个块的位置。重复此方法,直到获得所需的内容:

String result = new String(reallyBigByteArrayValue, "UTF-8");
result.substring(result.indexOf("some-unique-text"));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.