以编程方式获取方法内对象的执行顺序?

时间:2013-01-25 10:42:14

标签: smalltalk pharo squeak

我有这段代码(取自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 [有事做]]。 //这就是原始代码的样子。

2 个答案:

答案 0 :(得分:5)

查看我们的AST interpreter,它将为您提供对Smalltalk代码执行的细粒度控制。

使用底层AST作为执行格式,可以很容易地将当前执行的代码映射回源代码。

答案 1 :(得分:2)

Pharo和其他几种方言都有一个字节码解释器。在Pharo中,查看ContextPart类>> trace:on:。以下是运行示例:

ContextPart trace: [3 factorial]