PyCharm 能否以正确的顺序显示变量的字段?

Can PyCharm display the fields of a variable in correct order?

我定义了一个数据 class,它有几个字段。当我打印它时,它们以正确的顺序显示:

def test():
    @dataclass
    class Image:
        width: int
        height: int
        pixels: object

    image = Image(width=4, height=3, pixels=list(range(12)))
    print(image)
    pass

这段代码的输出是好的:

test.<locals>.Image(width=4, height=3, pixels=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

但是如果我检查 PyCharm 中的变量(通过在最后一行的断点处停止,即 pass),它会按字母顺序显示字段,这令人困惑:

我可以解决这个问题吗?

我正在使用PyCharm 2019.1.2.

我研究了调整对象在 "Variables pane" of the "Debug tool window". For my own use and trying to solve another question Showing class attributes in the Pycharm debugger when subclassing str 中显示方式的可能性,我认为通过显示 class 在“变量窗格”中完全不同的显示方式完美地例证了这一点,只是因为它继承自字符串。

Can I fix this behavior?

简单的回答是:(目前)无法完成。 PyCharm 调试器会自动决定如何在“变量窗格”中显示无法使用设置从 IDE 内部配置的对象。

这个问题中的具体情况是以声明顺序而不是字母顺序显示属性。这个问题类似于 File > Settings > Build, Execution, Deployment > Debugger > Data Views > Sort values alphabetically 但这是针对变量内的值顺序(例如,它按字母顺序对未排序的 set 的元素进行排序以便显示) - 而不是范围内的属性顺序。

这可能是我发现的 PyCharm 调试器的唯一限制。有一些很好的选择,但没有“变量窗格”那样方便:

  1. 使用 "Watches pane" - 允许完全控制您看到的内容和顺序。它的缺点是必须设置手表。
  2. 使用 Evaluate Expression 缺点是必须调用。
  3. 使用Console tab.

最后,“也许有可能” 自定义“变量窗格”的显示,但我认为这始终是 hack 而不是正常用例。如果我们注意到调试器是如何被调用的,我们就可以检查 pydevd.py 是如何实现的以及它接受的命令行参数。也许有一个未记录的 CLI 参数来配置“变量窗格”显示。

但是,只要看一眼 pydevd.py 模块的复杂性就足以在需要时简单地使用“监视窗格”作为替代。

C:\path_to_interpreter\python.exe

"C:\Program Files\JetBrains\PyCharm 2019.3.2\plugins\python\helpers\pydev\pydevd.py"

--multiproc --qt-support=auto --client 127.0.0.1 --port 51753 --file 

C:/path_to_your_module.py

Connected to pydev debugger (build 211.7142.13)