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

J3S*_*TER 3 debugging smalltalk pharo

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

在此处输入图片说明

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

在此处输入图片说明

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

mel*_*des 5

幸运的是,在任何 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: $}
Run Code Online (Sandbox Code Playgroud)