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

48 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 开发环境:浏览、检查与调试
> 原书依据:第 6 章、第 16–19 章,印刷页 26–30、118–149,PDF 页 37–41、129–160。
原书使用三键鼠标与特定窗口菜单。现代阅读时,保留动作的目的:求值、查找行为、检查对象、定位调用现场。具体菜单位置和快捷键以使用的镜像为准。
## 从工作区开始
Workspace 是编辑和求值表达式的空间。原书区分执行选中文本的 `do it` 与执行后显示返回值的 `print it`。检查器则让你观察得到的对象。
```smalltalk
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 的实现。实验将“表达式结果、对象状态、方法定义”连成一条路线。此实验尚未在本次任务执行。