我正在面对这样的调试情况。我可以看到的最古老的方法是BlockClosure newProcess。

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

在法鲁有可能吗?

最佳答案

简短的回答:不。一个新的过程没有任何概念。

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

| currentStack forkedProcess |
currentStack := thisContext copyStack.

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

请注意,由于调试器不知道您具有该引用,因此此不会增强您的调试体验。为此,您需要扩展当前进程的堆栈(上述变量):
forkedProcess := [
    thisContext bottomContext privSender: currentStack.
    self performOperations ] fork.

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

10-05 20:55
查看更多