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

Pharo: How to view the senders of newProcess in a Debugger?

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

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

这在 Pharo 中可行吗?

简答:没有。新进程在其概念形成之前没有任何历史记录。

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

| currentStack forkedProcess |
currentStack := thisContext copyStack.

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

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

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

像这样操作上下文链时要非常小心。您可能会遇到难以理解和调试的情况。我在这里展示的是为了说明,如果你不知道系统是如何工作的,就不应该使用。