Smalltalk 以编程方式获取方法内对象的执行顺序?
我有这段代码(取自ProfStef,但可以是任何类的任何方法)。如何以编程方式获取Squeak/Pharo执行对象的顺序 我知道smalltalk文档中的执行顺序,但如果我在构建应用程序时需要这些信息,该怎么办。本质上,使用它来构建一个执行映射,以显示代码外观和执行方式之间的差异 另外,我需要大规模地完成这项工作。。。我不能用手做这件事Smalltalk 以编程方式获取方法内对象的执行顺序?,smalltalk,pharo,squeak,Smalltalk,Pharo,Squeak,我有这段代码(取自ProfStef,但可以是任何类的任何方法)。如何以编程方式获取Squeak/Pharo执行对象的顺序 我知道smalltalk文档中的执行顺序,但如果我在构建应用程序时需要这些信息,该怎么办。本质上,使用它来构建一个执行映射,以显示代码外观和执行方式之间的差异 另外,我需要大规模地完成这项工作。。。我不能用手做这件事 tutorial: aTutorialClass lesson: aSelector | tutorial | tutorial := aT
tutorial: aTutorialClass lesson: aSelector
| tutorial |
tutorial := aTutorialClass new.
self player tutorial: tutorial.
self tutorial: aTutorialClass lessonAt: (tutorial indexOfLesson: aSelector).
输出将是一个类似于此的树
有些事
另一个物体[做这件事的东西]
finalobject[另一个对象[某件事可以这样做]。//这就是原始代码的样子。请查看我们的示例,它将为您提供对Smalltalk代码执行的细粒度控制
使用底层AST作为执行格式,很容易将当前执行的代码映射回源代码。Pharo和其他几种方言中有一个字节码解释器。在Pharo中,请查看ContextPart类>>跟踪:on:。下面是一个要运行的示例:
ContextPart trace: [3 factorial]
看来你是对的,它似乎有所有需要的课程。根据我在编译时读到的内容,它是“哑”的,您可以使用它生成执行树,例如代码。如果你有时间的话,从你网站的联系人名单上给你发了一封电子邮件来延长讨论。哇,当你添加这个答案时,我从来没有看到过这个答案。刚刚测试过,很有意思。我尝试了ContextPart跟踪:[Transcript open],它显示了为完成该任务而执行的操作。