2.7 KiB
2.7 KiB
开发环境:浏览、检查与调试
原书依据:第 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 常按类分类、类、协议、方法逐层选择。协议分类是组织方法的标签,不应与消息选择子或语言类型系统混同。
沿选择子阅读源码
- 在 Browser 中找到一个方法,确认实例侧还是类侧。
- 查看 implementors,比较相同选择子在不同类中的实现。
- 查看 senders,找出哪些方法发送这条消息。
- 查实例变量引用,理解状态由谁读写。
- 对具体对象求值并 inspect,核对静态阅读与实际状态是否一致。
senders 反映可被工具识别的引用;使用 perform: 的动态调用可能需要另外追踪。只看到一个实现者,也不能直接推断所有调用都落到它。
调试的四个视角
原书 Debugger 把调用链、代码、接收者检查器和局部变量检查器放在一起。某个对象不理解消息时,先检查接收者实际是什么,再检查参数,最后追踪调用者为何给它发送这个选择子。
修改运行系统中的方法可能影响其他窗口。为了复现,单独记录实验类、方法文本、镜像版本和预期结果,不把手工修复后的镜像当作原始系统状态。
一个建议实验
创建本教程的 StudyCounter,求值并 inspect;调用 increment 后再看 count;随后在 Browser 中查 value 的实现。实验将“表达式结果、对象状态、方法定义”连成一条路线。此实验尚未在本次任务执行。