4

我有这段代码(取自 ProfStef,但可以是任何类的任何方法)。我如何以编程方式获取 Squeak/Pharo 执行对象的顺序。

我从 smalltalk 文档中知道执行顺序,但是如果我在正在构建的应用程序中需要这些信息怎么办。本质上是使用它来构建执行图,以显示代码外观和执行方式之间的差异。

PS。我需要大规模地完成这个......我不能手工完成。

tutorial: aTutorialClass lesson: aSelector 
    | tutorial | 
    tutorial := aTutorialClass new. 
    self player tutorial: tutorial. 
    self tutorial: aTutorialClass lessonAt: (tutorial indexOfLesson: aSelector).

输出将是一棵类似于此的树

做这件事

anotherobject [某事做这件事]

finalobject [ anotherobject [something do this] ]。// 这就是原始代码的样子。

4

2 回答 2

5

查看我们的AST 解释器,它可以让您对 Smalltalk 代码的执行进行细粒度控制。

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

于 2013-01-25T10:49:56.890 回答
2

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

ContextPart trace: [3 factorial]
于 2013-02-06T21:55:02.857 回答