Smalltalk - 保存时收集为空错误

时间:2013-06-16 02:17:13

标签: smalltalk

有谁知道会导致什么?我无法将任何内容保存到我的班级,因为我收到了调试异常:集合为空

enter image description here


链接到来源:https://dl.dropboxusercontent.com/u/1817765/Pharo%20Crash%20Files.rar

重新创建的步骤:

  • 启动Pharo 1.1
  • 在同一目录中选择.image文件,不带 .changes文件
  • 尝试选择NumberWithUnits>>=
    • 崩溃
  • 尝试将几乎保存到NumberWithUnits
    • 崩溃

2 个答案:

答案 0 :(得分:6)

问题是我没有与我的项目关联的正确.changes文件。自从我和我的队友合作以来,这些都在翻译中丢失了。将正确的.changes文件放入.image文件的目录后,一切正常。

答案 1 :(得分:5)

如果缺少源代码,Squeak / Pharo会有特殊处理:他们尝试从适当的MethodDictionary反编译CompiledMethod。

您在此处看到的是Decompiler无法正确反编译某些方法。

如果没有代码,IDE将无法运行,您将陷入困境(您无法保存代码,浏览代码,调试代码......)

这个Pharo 1.1版本很老了,你不会得到任何支持。

但有趣的是,您遇到的Decompiler的错误仍然存​​在于当前的Squeak主干开发中(4.5)
并且使Decompiler松散的方法是:

< aNumberWithUnits
    (self compareUnits: aNumberWithUnits) 
        ifTrue: [self value: ((aNumberWithUnits value) < (self value) ifTrue: [^true] ifFalse: [^false]).] 
        ifFalse: [^Error new signal: 'Incompatible unit types.'].

这是一个非常规的代码,因为永远不会发送消息[self value: ...] 原因是首先评估参数,条件的两个分支都将返回ifTrue: [^true] ifFalse: [^false]

既然你探索了一些只有新手才能探索的黑暗角落,并且我们未能测试,我只是说谢谢。

如果您愿意,可以在http://bugs.squeak.org

上打开报告