最近转换为Intellij。 Eclipse在调试器中有一个功能," Primitive Display Options",它具有十六进制和ascii值的调试器渲染基元。
因为Intellij到目前为止一切都变得轻而易举,我认为这不是一件容易的事情,但是经过一个小时和一些非功能性的数据类型渲染之后,我发现自己已经准备好爬回到eclipse。我做了一些有效的渲染器,但仅用于对象,所以我只能得出结论,渲染器似乎不适用于原语。有人能指出我在正确的方向吗?
编辑:我已经看到了在默认渲染中选择十六进制的选项,但我希望的不仅仅是每个变量需要2次点击的解决方案。
答案 0 :(得分:18)
我的解决方案是使用byte[]
的以下表达式提供自定义数据类型渲染器:new String(Hex.encode(this));
。
默认情况下,只要启用了数据类型渲染器(在应用程序重新启动时保持状态等),它就会起作用。如果您愿意,可以添加更精细的字符串格式(我通常有一个实用程序类可以进一步格式化,我只是从DTR表达式字段调用它。)
答案 1 :(得分:9)
对于整数值(即,既不是浮点值也不是布尔值),您可以通过右键单击调试器中的基元并选择“查看为” - >将它们视为十六进制值。 “十六进制”。
默认情况下,数据类型渲染器功能仅适用于对象,表示基元的唯一现实方式是作为其整数值或以十六进制表示,所以我认为这是一个愉快的妥协。
答案 2 :(得分:3)
我制作了一些有效的渲染器,但仅限于物体,所以我可以 只得出结论,渲染器似乎不适用于原语。
借助IDEA 2016.3,它最终可以为基本类型(包括数组)定义自定义Java数据类型渲染器。
答案 3 :(得分:2)
有一个选项(复选框)可永久更改所有基元,以在数据视图选项下显示为十六进制。参见:
设置> 构建,执行,部署> 调试器> 数据视图> Java >
"Show hex value for primitives"
答案 4 :(得分:1)
这与Andy的解决方案类似,但不要求您定义byte[]
类(他甚至没有提到)。仅适用于Java8项目(即目前不在Android上)。
您必须使用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?"...":"")
的以下表达式提供自定义数据类型渲染器(请参阅Andy's answer):
{{1}}
它将格式化数据,使得“01020304 05060708 09”,即按4分组并用空格分隔。只显示前80个字节,如果还有更多,则添加省略号。
答案 5 :(得分:-1)
您还可以尝试DeltaHex Editor plugin用于基于IntelliJ的IDE,它可以在调试器中显示具有典型十六进制+文本预览的窗口,用于字节数组。
插件位于“设置/插件/浏览存储库/搜索DeltaHex
”中