Smalltalk - 保存时收集为空错误

MrD*_*Duk 9 smalltalk

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

在此输入图像描述


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

重新创建的步骤:

  • 启动Pharo 1.1
  • 选择.image文件,而不.changes在同一个目录下的文件
  • 尝试选择 NumberWithUnits>>=
    • 紧急
  • 尝试几乎保存任何东西NumberWithUnits
    • 紧急

MrD*_*Duk 6

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


aka*_*ice 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.'].
Run Code Online (Sandbox Code Playgroud)

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

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

如果您愿意,可以在http://bugs.squeak.org上打开报告