2013-06-16 10 views
9

これを引き起こす原因は誰か分かりますか?私は、デバッグ例外がスローされ得るので、私は私のクラスには何も保存することはできません:ソースへのコレクションが空であるSmalltalk - 保存時にコレクションが空になるエラー

enter image description here


リンク:再作成するhttps://dl.dropboxusercontent.com/u/1817765/Pharo%20Crash%20Files.rar

ステップ:

  • Pharoを起動する1.1
  • .imageファイルを選択します。NumberWithUnits
    • にほとんど何かを保存しようと
  • クラッシュ
  • NumberWithUnits>>=
    • を選択する.changes同じディレクトリ内のファイル
    • 試みずにクラッシュ
+1

に関するレポートを開くことができ、それがきしみ4.xの味のように見えます。正確にはどのバージョンですか?それはバグのように見えるので、おそらくスタックをダンプしてsqueak-devメーリングリストに投稿しなければならない(またはmantisの問題を開く)必要があるでしょう。 –

+1

ニースバグを発見! –

答えて

5

ソースコードがない場合、Squeak/Pharoは特別な処理を行います。適切なMethodDictionaryからCompiledMethodを試して逆コンパイルします。

ここで見たことは、Decompilerがいくつかの方法を正しく逆コンパイルできなかったことです。コードなし

、IDEが非機能的であり、そしてあなたが立ち往生している(あなたのコード、デバッグコードを閲覧し、あなたのコードを保存することはできません...)

このファーロ1.1バージョンは非常に古いですし、それに対するサポートはありません。

しかし、興味深いことに、あなたが遭遇したデコンパイラのバグがまだ現在のSqueakのトランクの開発に存在している(4.5)
そして、逆コンパイラのloosyを作る方法は次のとおりです。

< 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

+1

報告しました:http://bugs.squeak.org/view.php?id=7771 –

6

問題は私のプロジェクトに関連する正しい.changesファイルがないことでした。私のチームメイトと私が協力していたので、これらは翻訳で失われました。正しい.changesファイルを私の.imageファイルのディレクトリに置くと、すべてがうまくいきました。

+0

良いですが、Decompilerはこの場合ソースコードを再構築するために使用され、2番目の問題があります:それは失敗しました。それを失敗させたソースコードを共有できますか? –

+0

元の質問へのレクリエーション手順付きのダウンロードリンクを追加しました – MrDuk

+1

このバージョンのPharoは古く、この小さなDecompilerの問題を調査すると、開発ブランチ(3.0)で多くのことが今起こっていることを知っているだけですコンパイラー、逆コンパイラー、そして時にはソースコードの記憶装置です。私はスクイークをチェックしようとします。 –