Files
endorphin-tabularium-docs/content/docs/smalltalk/09-live-environment.md
T

2.7 KiB
Raw Blame History

开发环境:浏览、检查与调试

原书依据:第 6 章、第 16–19 章,印刷页 26–30、118–149,PDF 页 37–41、129–160。

原书使用三键鼠标与特定窗口菜单。现代阅读时,保留动作的目的:求值、查找行为、检查对象、定位调用现场。具体菜单位置和快捷键以使用的镜像为准。

从工作区开始

Workspace 是编辑和求值表达式的空间。原书区分执行选中文本的 do it 与执行后显示返回值的 print it。检查器则让你观察得到的对象。

OrderedCollection new inspect

这段表达式会请求打开对象检查器;它不是网页中的交互按钮。运行前应准备具有相应 GUI 工具的镜像。

Browser 看行为,Inspector 看状态

工具 主要问题 需要记录
Browser 方法定义在哪里? 类侧或实例侧、协议分类、定义类
Inspector 这个对象现在引用了什么? 对象身份、槽位、子对象
Debugger 执行为什么到这里? 调用链、接收者、参数、临时变量
文件浏览工具 源码怎样导入导出? 文件内容、导入动作与当前镜像变化
Form/Bit Editor 图形数据怎样变化? 图像对象与像素编辑结果

Browser 常按类分类、类、协议、方法逐层选择。协议分类是组织方法的标签,不应与消息选择子或语言类型系统混同。

沿选择子阅读源码

  1. 在 Browser 中找到一个方法,确认实例侧还是类侧。
  2. 查看 implementors,比较相同选择子在不同类中的实现。
  3. 查看 senders,找出哪些方法发送这条消息。
  4. 查实例变量引用,理解状态由谁读写。
  5. 对具体对象求值并 inspect,核对静态阅读与实际状态是否一致。

senders 反映可被工具识别的引用;使用 perform: 的动态调用可能需要另外追踪。只看到一个实现者,也不能直接推断所有调用都落到它。

调试的四个视角

原书 Debugger 把调用链、代码、接收者检查器和局部变量检查器放在一起。某个对象不理解消息时,先检查接收者实际是什么,再检查参数,最后追踪调用者为何给它发送这个选择子。

修改运行系统中的方法可能影响其他窗口。为了复现,单独记录实验类、方法文本、镜像版本和预期结果,不把手工修复后的镜像当作原始系统状态。

一个建议实验

创建本教程的 StudyCounter,求值并 inspect;调用 increment 后再看 count;随后在 Browser 中查 value 的实现。实验将“表达式结果、对象状态、方法定义”连成一条路线。此实验尚未在本次任务执行。