【问题标题】:Smalltalk - collection is empty error when savingSmalltalk - 保存时收集为空错误
【发布时间】:2013-06-16 02:17:13
【问题描述】:

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


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

重建步骤:

  • 启动 Pharo 1.1
  • 选择.image文件,没有同一目录下的.changes文件
  • 尝试选择NumberWithUnits>>=
    • 崩溃
  • 尝试将几乎任何东西保存到NumberWithUnits
    • 崩溃

【问题讨论】:

  • 从图片上看,有点像吱吱4.x的味道。具体是哪个版本?它看起来像一个错误,所以你可能不得不转储堆栈并将其发布到 squeak-dev 邮件列表(或打开一个螳螂问题)。

标签: smalltalk


【解决方案1】:

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

【讨论】:

  • 不错,但是本例使用了反编译器来重构源代码,还有第二个问题:失败。你能分享导致它失败的源代码吗?
  • 在原始问题中添加了包含娱乐步骤的下载链接
  • 啊,谢谢,这个版本的 Pharo 已经过时了,调查这个反编译器的小问题只会浪费时间,因为开发分支 (3.0) 中正在发生许多关于编译器、反编译器和有时很快源代码存储。不过,我会尝试检查 Squeak。
【解决方案2】:

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 上打开报告

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2014-10-15
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多