# 开发环境:浏览、检查与调试 > 原书依据:第 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 的实现。实验将“表达式结果、对象状态、方法定义”连成一条路线。此实验尚未在本次任务执行。