5

在 GNU Smalltalk 80 中,可以在您自己选择的纯文本编辑器中编写 smalltalk 代码。

因此,调试代码非常重要。

首先将文件保存为 txt 文件。然后使用“工具”从程序员文本编辑器打开文件。这里的工具 - 链接 C/programme/GNU/gnu smalltalk/gst.exe。代码正在运行。不包括调试选项。在这些情况下,编程是不可能的。必须有一个“调试”选项才能激活。

我的问题是:如何包含该调试选项?通常首先调试 smalltalk 代码。

4

2 回答 2

1

GNU Smalltalk 包括调试工具。它实现了Smalltalk 80中提到的Debugger类: . 旁边提到的其他类不一定要实现,可能是因为它们与 GUI 操作有关。DebugTool.stDebugger

相反,GNU Smalltalk 提供了MiniDebug命令行调试器,以便与 GNU Smalltalk 一起使用或在 IDE 不可用时使用。它或多或少是 GDB 的一个基本子集。

加载 MiniDebugger

一个简单的使用方法是将文件读入 gst:

$ gst
GNU Smalltalk ready

st> FileStream fileIn: '/usr/share/gnu-smalltalk/examples/MiniDebugger.st'
"Global garbage collection... done"
Loading package DebugTools
FileStream
st>

请注意, 的位置MiniDebugger.st是 Ubuntu 16.04 的典型位置。其他操作系统可能会将文件放在不同的位置。

MiniDebugger Hello World

MiniDebugger 的一个hello world示例是:

st> self halt
'nil error: halt encountered'
Halt(Exception)>>signal (ExcHandling.st:254)
Halt(Exception)>>signal: (ExcHandling.st:264)
UndefinedObject(Object)>>halt: (SysExcept.st:1464)
UndefinedObject(Object)>>halt (Object.st:1325)
UndefinedObject>>executeStatements (a String:1)
      6         ^self activateHandler: (onDoBlock isNil and: [ self isResumable ])
(debug) c
st>

提示符c处的条目是“继续”。(debug)其他选项将通过键入h(或任何其他无效命令)显示。

制作调试图像

将 MiniDebugger 加载到 gst REPL 后,可以创建包含调试器的映像:

st> ObjectMemory snapshot: 'myDebuggerImage.im'

然后在启动时重新加载gst(假设“myDebuggerImage.im”位于当前目录或gst默认情况下位于另一个地方):

$ gst -I myDebuggerImage.im 

设置断点

MiniDebugger 将在控制流遇到的任何时候出现Object:halt。例如,如果我有文件:

"Halter.st"
Object subclass: Halter [
  breakpoint [
    self halt.
  ]
]

然后:

st> h := Halter new
a Halter
st> h breakpoint
'a Halter error: halt encountered'
...
(debug)
于 2017-08-18T19:05:34.530 回答
0

不同的 smalltalks 针对不同的用户群。对于学习 smalltalk,GNU 是一个糟糕的选择。Smalltalk 是一种非常简单的语言,具有非常大的库和真正集成的开发环境。您在文本编辑器中的偏好对于此阶段并不重要(您可能会发现,也不是其他任何事情)。与输入新代码或更改现有代码相比,您将花费更多时间阅读和导航代码。Squeak 和 Pharo 是两个开源实现,具有不错的浏览器和调试器

于 2017-03-25T11:48:12.687 回答