GNU Smalltalk 80调试器。如何调试Smallcode代码?启动调试器?

6
在GNU Smalltalk 80中,您可以使用自己喜欢的纯文本编辑器编写Smalltalk代码。
因此,调试代码非常重要。
首先,将文件保存为txt文件。然后使用"工具"从程序员文本编辑器打开文件。 这里的工具链接是C/programme/GNU/gnu smalltalk/gst.exe。 代码正在运行。 调试选项未包含在内。 在这种情况下,无法进行编程。 必须有一个“调试”选项来激活。
我的问题是:如何包括该调试选项?通常先对Smalltalk代码进行调试。

1
编写Smalltalk代码主要在调试器中完成,而不是在基于文件的文本编辑器中完成。使用文本编辑器的生产力要低得多,只有在绝对必要的情况下才会使用。 - Stephan Eggermont
你好 Nathaniel,假设我“不关心 Smalltalk 80 在什么系统中运行”。我只想编写代码,然后按照自己的方式进行结构化。这样怎么样? - Zabo
1
然后你永远不会得到 Smalltalk。 - Stephan Eggermont
1
我不清楚你实际在做什么。是哪个平台?(Windows 还是 Linux?)当你说“你使用‘工具’从程序员文本编辑器中打开文件”时,你确切地使用了哪些程序?你是想使用第三方 IDE 吗?我不知道你所说的“链接”C/programme/GNU/gnu smalltalk/gst.exe 是什么意思。 - lurker
很容易。非常容易。 - Zabo
2个回答

2
GNU Smalltalk提供了调试工具。它在DebugTool.st中实现了一个Debugger类,正如Smalltalk 80:the language所述。与Debugger一起提到的其他类未必被实现,可能是因为它们涉及GUI操作。
相反,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 你好,世界

MiniDebugger 的一个 你好,世界 示例:

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 

设置断点

当控制流程遇到Object:halt时,MiniDebugger将出现。例如,如果我有以下文件:

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

然后:

st> h := Halter new
a Halter
st> h breakpoint
'a Halter error: halt encountered'
...
(debug)

0

不同的Smalltalk针对不同的用户群。对于学习Smalltalk来说,GNU是一个糟糕的选择。Smalltalk是一种非常简单的语言,具有非常大的库和真正集成的开发环境。在这个阶段,您的文本编辑器偏好并不重要(正如您可能会发现的那样)。您将花费更多的时间阅读和导航代码,而不是输入新代码或更改现有代码。Squeak和Pharo是两个开源实现,具有体面的浏览器和调试器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接