有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Intellij中的java数据类型渲染器?

最近转换成Intellij。Eclipse在调试器中有一个功能,“原语显示选项”,调试器以十六进制和ascii值呈现原语

Eclipse Debugger

由于到目前为止,Intellij中的一切都是轻而易举的事情,所以我认为这将是一件不需要动脑筋的事情,但在一个小时之后,经过大量非功能数据类型的渲染,我发现自己已经准备好爬回eclipse。我制作了一些效果不错的渲染器,但只适用于对象,所以我只能得出结论,渲染器似乎不适用于基本体。有人能给我指一下正确的方向吗

编辑:我已经看到了在默认渲染中选择十六进制的选项,但我希望得到的不仅仅是一个每个变量都需要点击两次的解决方案


共 (5) 个答案

  1. # 1 楼答案

    在数据视图的选项下,有一个选项(复选框)可以永久更改所有原语,使其显示为Hex。见:

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

    "Show hex value for primitives"

    enter image description here

  2. # 2 楼答案

    这与Andy的解决方案类似,但不需要定义Hex类(他甚至没有提到)。仅适用于Java8项目(也就是说,目前不适用于Android)

    必须使用以下表达式为byte[](请参见Andy's answer)提供自定义数据类型呈现程序:

    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”,即按四个字符分组,并用空格分隔。只显示前80个字节,如果有更多字节,则添加省略号

  3. # 3 楼答案

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

    默认情况下,只要数据类型渲染器处于启用状态(在应用程序重新启动等过程中保持状态),该功能就可以工作。如果愿意,您可以添加更复杂的字符串格式(我通常有一个实用程序类,它可以进行进一步的格式设置,我只是从DTR表达式字段调用它)

    Data Type Renderer

    Debugger view

  4. # 4 楼答案

    您还可以尝试DeltaHex Editor plugin使用基于IntelliJ的IDE,它可以在调试器中为字节数组显示带有典型十六进制+文本预览的窗口

    DeltaHex Editor Plugin Debug Byte Array Image

    插件可在设置/插件/浏览存储库/搜索DeltaHex中找到

  5. # 5 楼答案

    对于整数值(即,既不是浮点值也不是布尔值),可以通过右键单击调试器中的原语并选择“查看为”->;“十六进制”

    enter image description here

    默认情况下,数据类型渲染器功能只适用于对象,而表示原语的唯一现实方式是以其整数值或十六进制表示,因此我认为这是一个令人满意的折衷方案