我想知道是否有我可以在 Pharo 中覆盖的消息,以便我的自定义类在检查器/调试器中显示更多描述性信息,就像简单的变量类型一样,如整数或字符串。例如:

debugging - 更改对象在调试器/检查器变量值表中的显示方式-LMLPHP

取而代之的是,我希望它显示由其内部变量组成的更自定义和信息量更大的描述,以便对变量有更紧密/更整洁的 View ,而不必单击它并打开另一个图表(因此忽略了上图的信息)。我知道您可以增加下面显示的图表数量,但这不是问题的重点。我想实现这样的目标:

debugging - 更改对象在调试器/检查器变量值表中的显示方式-LMLPHP

我浏览了 pharo 论坛,一无所获,我还尝试覆盖 30 多种方法,希望其中一种方法改变了输出。只有 class 消息似乎改变了输出,但我只能返回 Metaclass 的一个实例,而且除了弄乱这个消息还会破坏很多东西。最后,我尝试对调试器和检查器进行逆向工程,以查看在哪个点构造了表以及使用了哪些值或发送了哪些消息来构建所述值,但这对我来说太多了,调用堆栈不断增长并且我什至不能划伤表面。

最佳答案

幸运的是,在任何 Smalltalk 中执行此操作非常容易。从 Object 继承的类型应该响应消息 printString ,最终响应 printOn: aStream 。这些消息应该给出对象的描述。所以,你应该在你的类中覆盖 printOn: ( printString 使用 printOn:) 并且所有浏览器和检查器都会自动使用它。Pharo 还有其他可能性,如果你想在不同的选项卡中提供更复杂的信息,但我认为 printOn: 就足够了你。

一个例子是:

MyPoint>>printOn: aStream
    aStream nextPut: ${.
    x printOn: aStream.
    aStream nextPutAll: ', '
    y printOn: aStream.
    aStream nextPut: $}

关于debugging - 更改对象在调试器/检查器变量值表中的显示方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59811735/

10-10 17:21