Intellij中的数据类型呈现器?
最近转换为Intellij。 Eclipse在调试器“Primitive Display Options”中有一个function,它具有hex和ascii值的调试器渲染基元。
因为到目前为止Intellij中的一切都变得轻而易举,我认为这将是一个不费脑子的事情,但是经过一个小时和一些非function性的数据类型渲染之后,我发现自己已经准备好爬回到eclipse。 我制作了一些有效的渲染器,但仅用于对象,所以我只能得出结论,渲染器似乎不适用于原语。 有人能指出我在正确的方向吗?
编辑:我已经看到了在默认渲染中选择hex的选项,但我希望能找到的东西不仅仅是每个变量需要2次点击的解决方案。
对于整数值(即,既不是浮点值也不是布尔值),您可以通过右键单击调试器中的基元并选择“查看为” – >“hex”来将它们视为hex值。
默认情况下,“数据类型渲染器”function仅适用于对象,表示基元的唯一实际方法是作为其整数值或以hex表示,因此我认为这是一个愉快的折衷方案。
我的解决方案是使用以下表达式为byte[]
提供自定义数据类型渲染器: new String(Hex.encode(this));
。
只要启用了数据类型渲染器(在应用程序重新启动时维护状态等),默认情况下就可以使用此方法。 如果您愿意,可以添加更精细的字符串格式(我通常有一个实用程序类可以进一步格式化,我只是从DTR表达式字段调用它)。
我制作了一些有效的渲染器,但仅用于对象,所以我只能得出结论,渲染器似乎不适用于原语。
使用IDEA 2016.3,最终可以为基本类型(包括数组)定义自定义Java数据类型呈现器。
这与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”中
- 如何让Apache POI和JAXB协同工作?
- IntelliJ,是否可以像NetBeans一样“制作控制器”?
- 设置JVM选项以避免错误org.springframework.cglib.core.ReflectUtils $ 1 非法reflection访问
- 在IntelliJ IDEA中将外部库添加到工件jar中
- Eclipse / Idea忽略了Maven Java版本配置
- IntelliJ可以自动创建装饰器类吗?
- 从IntelliJ IDEA中删除黄色类名称弹出窗口(breadcrumb)
- IntelliJ IDEA:Build Project上的StackOverflowError
- 有关IntelliJ到Eclipse转换的问题