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

时间:2015-08-26 15:49:07

标签: debugging gnu smalltalk gnu-smalltalk amber-smalltalk

在GNU Smalltalk 80中,可以在自己的平面中编写smalltalk代码 个人选择的文本编辑。

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

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

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

2 个答案:

答案 0 :(得分:1)

GNU Smalltalk包含用于调试的工具。它实现了{em> Smalltalk 80中提到的Debugger类:DebugTool.st中的语言。与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 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 

设置断点

然后,只要控制流遇到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)

答案 1 :(得分:-1)

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