我正在面对这样的调试情况。我可以看到的最古老的方法是BlockClosure newProcess。
但是我需要查看谁是newProcess发送的源。当我在调试器方法列表中单击该方法时,堆栈不会像通常显示调用方那样展开。
在法鲁有可能吗?
最佳答案
简短的回答:不。一个新的过程没有任何概念。
答案略长:如果您愿意做一些工作,则可以使用正常的闭包创建在新流程中嵌入对调用方流程的引用。这是一个例子:
| currentStack forkedProcess |
currentStack := thisContext copyStack.
forkedProcess := [
| referenceToCaller |
referenceToCaller := currentStack.
self performOperations ] fork.
请注意,由于调试器不知道您具有该引用,因此此不会增强您的调试体验。为此,您需要扩展当前进程的堆栈(上述变量):
forkedProcess := [
thisContext bottomContext privSender: currentStack.
self performOperations ] fork.
像这样操作上下文链时要非常小心。您可能会遇到难以理解和调试的情况。我在这里显示的内容仅作说明之用,如果您不知道系统的工作方式,则不应使用。