Pharo:如何在调试器中查看newProcess的发送者?

时间:2016-02-20 23:15:26

标签: debugging fork smalltalk pharo

我正面临这样的调试情况。我能看到的最古老的方法叫做BlockClosure newProcess。

但我需要看看谁发起了newProcess发送。当我在调试器方法列表中单击该方法时,堆栈不会像通常显示调用者那样展开。

这在Pharo有可能吗?

1 个答案:

答案 0 :(得分:3)

简答:不。一个新的过程在其构思之前没有任何历史记录。

稍微长一点的回答:如果你愿意做一些工作,你可以使用正常的闭包创建在新进程中嵌入对调用者进程的引用。这是一个例子:

| currentStack forkedProcess |
currentStack := thisContext copyStack.

forkedProcess := [
    | referenceToCaller |
    referenceToCaller := currentStack.
    self performOperations ] fork.

请注意,由于调试器不知道您具有该引用,因此不会增强您的调试体验。为此,您需要扩展当前流程的堆栈(上述变体):

forkedProcess := [
    thisContext bottomContext privSender: currentStack.
    self performOperations ] fork.

在像这样操纵上下文链时要非常小心。您最终可能会遇到难以理解和调试的情况。我在这里展示的仅用于说明,如果您不知道系统的工作原理,则不应使用。