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

186

在调试Java代码时,"变量"和"表达式"视图中的字符串仅显示到一定长度,此后Eclipse会显示"..."。

有没有办法检查整个字符串?(这可以减轻在各个地方添加调试日志语句的痛苦)


你在哪里看到这种行为?调试器的哪个部分? - skaffman
顺便提一下,这可能是一个误称,因为它可能对你不起作用,但如果你使用像java.util.logging或log4j这样的调试库,你可以轻松地将你的调试语句(具有不同级别的调试)转换为打印输出或日志文件,这可能会给你带来优势,而在调试窗口中筛选字符串可能不会。只是一个想法=) - corsiKa
这太糟糕了 - 问题在2023年仍然存在 - 默认的maxsize应该在此期间要大得多,以避免大部分问题。设置maxsize似乎没有效果。 - Wolfgang Fahl
9个回答

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

enter image description here


17
比所选方案好得多的解决方案。谢谢! - Colin
13
指出“详细信息窗格”是显示字符串内容的部分是很好的。 - Bnrdo
1
如何在Eclipse Kepler中完成此操作?请帮忙。 - Foolish
1
好消息是,这个改变似乎也影响了在悬停变量、检查 "检查" 窗口或 "表达式" 视图和在 "显示" 视图中显示值时显示的长度。 - Steve Chambers
1
我已经更新了正确的解决方案(之前被接受的那个只适用于非常旧的Eclipse版本)。 - ragebiswas

135
变量视图中,右键单击该变量并选择更改值。如果您的变量很大,则需要等待几分钟(此时Eclipse不响应命令),但最终Eclipse将完全显示您的变量。

3
我只能看到"data:image/bitmap;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQE... (长度:22869)"。 "Max Length"选项无效,“Change value”也不行。 - falko
@falko,“最大长度”对我没用,但“更改值”可以(根据变量长度等待几秒钟后)。 - Umberto
至少在我的系统上,这比增加“最大长度”要慢得多(请参见其他答案)。 - sleske
Eclipse 对你的想法并不太满意。我已经尝试了这个方法,但现在已经等待了30分钟,还没有任何来自 Eclipse 的响应。但是,看起来它可以工作啦 ;) - Joshit

24

如果您有一个非常长的字符串,我会使用不同的策略:将其转储到文件中。我在Display视图中使用一小段代码进行评估,并将数据转储到文件中。我使用Commons IO,但您也可以使用仅限于JDK的方法。

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

当然,为了让它起作用,您需要在类路径中使用Commons IO JAR。如果没有,请转而使用JDK的工具。


6
非常巧妙的解决方法。就我个人而言,我认为这是最佳答案。但需要注意的是,在JVM运行的系统中必须定义<filename>,如果你正在进行远程调试,则文件将被写入远程系统,而不是在运行eclipse的工作站上。 - rexford

22

从Eclipse调试视图中查看字符串值的最佳方法如下。

1)切换到Eclipse的调试视图

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

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

4)干杯

enter image description here


2
这个图形化的解释非常有帮助。+1 - Bhavin Shah

3

当调试器到达您想要的字符串值的点时,只需键入sysOut语句即可。

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

选择上述语句,右键->执行

它将在控制台上打印出值。


0

以上的方法对我都没用,而且我的Eclipse中有一些用户界面元素找不到。我正在使用STS 4.3.1。

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

String result = new String(reallyBigByteArrayValue, "UTF-8");
result.substring(result.indexOf("some-unique-text"));

0

在Eclipse Mars中没有"maxLength"。而且,“更改值”仅适用于“变量”,而不是“表达式”,因此上述方法对我都不起作用。

enter image description here

而且,表达式被切成了中间,而不是在末尾。我猜他们改变了默认行为。

对我有效的唯一方法是扩展表达式名称列的宽度,并单击表达式以选择所有内容,以查看完整长度的内容。


0

对于基于JavaScript的Eclipse调试,"更改值"方法和"最大长度"方法都对我无效,将所需对象添加到观察(表达式)中,然后右键单击观察的表达式选择"加载完整值"是我唯一有效的解决方案,但即使这样也会在输出中插入不必要的"\n"

注意 - 必须为"加载完整值"设置"最大长度",以便它加载值直到最大长度(默认值为10000)。请参考上面的答案了解如何设置最大长度。


0
在Eclipse IDE 2020-09中,右键点击后选择“Pretty print to console”。 Right Click dialog 从控制台可以完整地复制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接