我有这段代码(取自ProfStef,但可以是任何类的任何方法)。我如何以编程方式获取Squeak / Pharo执行对象的顺序。
我知道来自smalltalk文档的执行顺序,但如果我在我正在构建的应用程序中需要这些信息该怎么办。基本上用它来构建一个执行映射,以显示代码的外观和执行方式之间的区别。
PS。我需要大规模地完成这项工作......我不能手工完成。
tutorial: aTutorialClass lesson: aSelector
| tutorial |
tutorial := aTutorialClass new.
self player tutorial: tutorial.
self tutorial: aTutorialClass lessonAt: (tutorial indexOfLesson: aSelector).
输出将是一个与此类似的树
某事点
另一个对象[有点像这个]
finalobject [anotherobject [有事做]]。 //这就是原始代码的样子。
答案 0 :(得分:5)
查看我们的AST interpreter,它将为您提供对Smalltalk代码执行的细粒度控制。
使用底层AST作为执行格式,可以很容易地将当前执行的代码映射回源代码。
答案 1 :(得分:2)
Pharo和其他几种方言都有一个字节码解释器。在Pharo中,查看ContextPart类>> trace:on:。以下是运行示例:
ContextPart trace: [3 factorial]