GNU Smalltalk 包含调试工具。它实现了一个Debugger https://github.com/gnu-smalltalk/smalltalk/blob/a5d7f1ad32fe77ef89406be82b7296899b63b8e7/packages/debug/DebugTools.st中提到的类Smalltalk 80:语言 within DebugTool.st
。旁边提到的其他课程Debugger
不一定要实现,可能是因为它们与 GUI 操作相关。
相反,GNU Smalltalk 提供了迷你调试 https://github.com/gnu-smalltalk/smalltalk/blob/a5d7f1ad32fe77ef89406be82b7296899b63b8e7/packages/debug/DebugTools.st与 GNU Smalltalk 一起使用或在 IDE 不可用时使用的命令行调试器。它或多或少是 GDB 的基本子集。
加载迷你调试器
一个简单的使用方法是将文件读入 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 的典型情况。其他操作系统可能会将文件放在不同的位置。
迷你调试器你好世界
A 你好世界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
at the (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.
]
]
Then:
st> h := Halter new
a Halter
st> h breakpoint
'a Halter error: halt encountered'
...
(debug)