Intellij中的数据类型呈现器?

最近转换为Intellij。 Eclipse在调试器“Primitive Display Options”中有一个function,它具有hex和ascii值的调试器渲染基元。

Eclipse调试器

因为到目前为止Intellij中的一切都变得轻而易举,我认为这将是一个不费脑子的事情,但是经过一个小时和一些非function性的数据类型渲染之后,我发现自己已经准备好爬回到eclipse。 我制作了一些有效的渲染器,但仅用于对象,所以我只能得出结论,渲染器似乎不适用于原语。 有人能指出我在正确的方向吗?

编辑:我已经看到了在默认渲染中选择hex的选项,但我希望能找到的东西不仅仅是每个变量需要2次点击的解决方案。

对于整数值(即,既不是浮点值也不是布尔值),您可以通过右键单击调试器中的基元并选择“查看为” – >“hex”来将它们视为hex值。

在此处输入图像描述

默认情况下,“数据类型渲染器”function仅适用于对象,表示基元的唯一实际方法是作为其整数值或以hex表示,因此我认为这是一个愉快的折衷方案。

我的解决方案是使用以下表达式为byte[]提供自定义数据类型渲染器: new String(Hex.encode(this));

只要启用了数据类型渲染器(在应用程序重新启动时维护状态等),默认情况下就可以使用此方法。 如果您愿意,可以添加更精细的字符串格式(我通常有一个实用程序类可以进一步格式化,我只是从DTR表达式字段调用它)。

数据类型渲染器

调试器视图

我制作了一些有效的渲染器,但仅用于对象,所以我只能得出结论,渲染器似乎不适用于原语。

使用IDEA 2016.3,最终可以为基本类型(包括数组)定义自定义Java数据类型呈现器。

https://www.jetbrains.com/idea/whatsnew/#v2016-3

这与Andy的解决方案类似,但不要求您定义Hex类(他甚至没有提到)。 仅适用于Java8项目(即目前不在Android上)。

您必须使用byte[]的以下表达式提供自定义数据类型渲染器(请参阅Andy的答案 ):

 IntStream.range(0,Math.min((this.length+3)/4,20)).mapToObj(i->IntStream.range(i*4,Math.min(i*4+4,_this.length)).mapToObj(i1->String.format("%02x",_this[i1])).collect(Collectors.joining())).collect(Collectors.joining(" "))+(this.length>80?"...":"") 

它将格式化数据,使得“01020304 05060708 09”,即按4分组并用空格分隔。 仅显示前80个字节,如果有更多,则添加省略号。

有一个选项(复选框)可永久更改所有基元,以在数据视图选项下显示为hex 。 看到:

设置 > 构建,执行,部署 > 调试器 > 数据视图 > Java >

"Show hex value for primitives"

在此处输入图像描述

您还可以尝试基于IntelliJ的IDE的DeltaHex编辑器插件 ,它可以在调试器中显示具有典型hex+文本预览的窗口,用于字节数组。

DeltaHex编辑器插件调试字节数组图像

插件位于“设置/插件/浏览存储库/搜索DeltaHex”中