Smalltalk 吱吱声4.1';调试菜单问题

Smalltalk 吱吱声4.1';调试菜单问题,smalltalk,squeak,Smalltalk,Squeak,朋友 如标题所示,当我在Squeak 4.1中调试时,菜单“debug it”功能强大,有继续、重新启动、进入、结束、通过按钮等。每次进入按钮时,我都可以跟踪到特定代码,但通过按钮和通过按钮的区别是什么?Squeak调试器一开始可能有点吓人。让我们检查一下它的各个部分 上下文堆栈 调试器窗口顶部的列表表示上下文堆栈或调用堆栈。上下文是活动块或方法的状态 堆栈中最顶层的上下文是当前正在执行的上下文。通常情况下,从上下文返回后,程序在其下的上下文(即其发送方的上下文)中继续执行 代码窗格 上下文堆栈

朋友
如标题所示,当我在Squeak 4.1中调试时,菜单“debug it”功能强大,有继续、重新启动、进入、结束、通过按钮等。每次进入按钮时,我都可以跟踪到特定代码,但通过按钮和通过按钮的区别是什么?

Squeak调试器一开始可能有点吓人。让我们检查一下它的各个部分

上下文堆栈

调试器窗口顶部的列表表示上下文堆栈或调用堆栈。上下文是活动块或方法的状态

堆栈中最顶层的上下文是当前正在执行的上下文。通常情况下,从上下文返回后,程序在其下的上下文(即其发送方的上下文)中继续执行

代码窗格

上下文堆栈中高亮显示的方法的代码显示在调试器窗口中心的代码窗格中,该方法中的当前语句将高亮显示

实例和上下文变量

在调试器窗口的底部有两个监视列表,用于显示变量

左侧的列表包含当前方法接收器的所有实例变量。右侧的列表包含当前上下文中的所有临时变量

当在这些列表中选择变量时,其值将显示在列表右侧的空间中

调试器按钮

假设调试器处于下图所示的状态,调试器按钮将执行以下操作:

继续:关闭调试器并继续。
继续正常执行程序。这里显示成绩单上的“12345”,发出嘟嘟声,返回到
#someMethod
等等

重新启动:将上下文重置为其开始位置。
重新启动当前堆栈上下文的执行,再次突出显示其第一条消息发送(此处
to:5

进入:进入发送的消息
方法内部的步骤(此处
Interval>>do:
),突出显示其中发送的第一条消息

结束:逐步结束消息发送
执行突出显示的消息发送(
#do:
)并突出显示下一个(
#beep

通过:进入一个块
通过类似于over的代码单步执行,但调试器在输入其代码属于当前显示的方法的任何上下文时也会停止。这意味着:

  • 执行暂停在
    [:each | Transcript show:each]
    )块内,而不是一次跳过整个
    \do:
    调用
  • 当从块返回时,调试器将在此方法中前进到下一个点,而不是重新调整到块被评估的位置(即
    Interval>>do:
一些简单的块构造,如
ifTrue:[]
ifFalse:[]
不会编译为实际的消息发送,并且无论使用的是Over还是Through,调试器都会在这些块中进行步进

完整堆栈:显示完整堆栈
在堆栈窗格中显示更多帧

运行到此处:运行到所选内容
例如,如果在此方法中突出显示文本“beep”,程序将在
#beep
消息发送之前继续并停止

其中:选择当前电脑范围
如果光标被移动,则重新突出显示代码窗格中发送的下一条消息(此处
do:[:each | Transcript show:each]

其他功能

Squeak调试器还允许您:

  • 获取DNU时,单击“创建”按钮,轻松创建缺少的方法
  • 允许您直接在调试器中编辑代码
  • 使用代码中的do it(cmd-a)和print it(cmd-p)命令计算代码位
  • 从堆栈、变量列表和代码窗格的关联菜单中打开浏览器或检查器

Squeak调试器一开始可能有点吓人。让我们检查一下它的各个部分

上下文堆栈

调试器窗口顶部的列表表示上下文堆栈或调用堆栈。上下文是活动块或方法的状态

堆栈中最顶层的上下文是当前正在执行的上下文。通常情况下,从上下文返回后,程序在其下的上下文(即其发送方的上下文)中继续执行

代码窗格

上下文堆栈中高亮显示的方法的代码显示在调试器窗口中心的代码窗格中,该方法中的当前语句将高亮显示

实例和上下文变量

在调试器窗口的底部有两个监视列表,用于显示变量

左侧的列表包含当前方法接收器的所有实例变量。右侧的列表包含当前上下文中的所有临时变量

当在这些列表中选择变量时,其值将显示在列表右侧的空间中

调试器按钮

假设调试器处于下图所示的状态,调试器按钮将执行以下操作:

继续:关闭调试器并继续。
继续正常执行程序。这里显示成绩单上的“12345”,发出嘟嘟声,返回到
#someMethod
等等

重新启动:将上下文重置为其开始位置。
重新启动当前堆栈上下文的执行,再次突出显示其第一条消息发送(此处
to:5

进入:进入发送的消息
方法内部的步骤(此处
Interval>>do:
),突出显示其中发送的第一条消息。