9

有谁知道这会导致什么?我无法将任何内容保存到我的班级,因为我抛出了一个调试异常:Collection is empty

在此处输入图像描述


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

重建步骤:

  • 启动 Pharo 1.1
  • 选择.image文件,没有.changes同目录下的文件
  • 尝试选择NumberWithUnits>>=
    • 碰撞
  • 尝试将几乎所有内容保存到NumberWithUnits
    • 碰撞
4

2 回答 2

6

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

于 2013-06-18T01:04:59.190 回答
5

Squeak/Pharo 在缺少源代码的情况下有特殊处理:它们尝试从适当的 MethodDictionary 反编译 CompiledMethod。

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

没有代码,IDE 将无法运行,并且您会被卡住(您无法保存代码、浏览代码、调试代码......)

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

但有趣的是,您遇到的 Decompiler 的 bug 在当前的 Squeak trunk 开发(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上打开报告

于 2013-06-19T23:20:45.800 回答