アンマネージ コードとしてロードされたパーセルを含む古い VW3/ENVY イメージがあります (マスタリング ENVY/DEVELOPERが警告する状況とまったく同じです)。残念ながら、この問題はかなり前に発生しており、小包が読み込まれていない画像に「戻る」だけでは遅すぎます。
どうやら、この問題を解決する方法があります (これが解決された 1 つの開発イメージがあり、管理されていない区画とまったく同じコードを含む通常の構成マップがありますが、それらはロードできません)。その方法は長い間忘れられていました (そして、その特定の開発イメージを新しいランタイム イメージのベースとして使用することにはいくつかの問題があるため、もう一度行う方法を見つける必要があります)。
理論的には、パーセルを削除して構成マップからコードをリロードできるはずです。実際には、通常の方法 (ParcelBrowser を使用するか、UnmanagedCode>>remove を直接呼び出す) はすべて失敗します。問題のあるセレクターをメソッド ディクショナリから手動で削除しようとしましたが、特定のポイント (#primBecome: の呼び出しを含む) を過ぎると、イメージ全体が完全にハングします (デバッガーにドロップすることさえできません)。クラスとメソッドのインスタンスのハッキングを開始しました。ENVY をだまして、これらの特定のメソッドが通常のバージョン管理されたコードであると認識させようとしたのですが、まだ成功していません。
ポインタを提供するのに十分なVW 3をまだ覚えている、スモールトーク/羨望の達人が周りにいますか?
ステータスの更新 問題を解決しようとして 1 週間が経過した後、少なくとも部分的には解決できました。
まず、umnanaged コードのファイル ポインターを修正する必要がありました (そうしないと、メソッドにアクセスしようとしたすべてのものが例外をスローしてしまいます)。ENVY はパーセルを拡張しているように見えるので、理論的には、void
ロード時にすべての整数ファイル ポインターが ENVY のファイル ポインターに変更されますが、私の場合は手動で行う必要がありました (パーセルは、定義するすべてのセレクターの列挙を提供します)。コードを微調整する別の方法もありfilePointer
ますが、必要なすべての画像で自動的に行うのは簡単ではありません。
その後、小包を破棄できます。これにより、小包の情報は削除されますが、コードは保持されます。公式の「破棄」メカニズムには、有効な変更ファイル (envy は使用しないため、手動で設定し、後でリセットする必要があります) とパーセル ソース (幸運にもそれがありました) が必要です。
メソッドを (手動で、または ENVY からアプリケーションまたはクラスをロードすることによって) 変更できるようにするには、管理されていない状態を取り除く必要があります。これは、手動で微調整することで実行できますTheClass>>applicationAssocs
(タイムスタンプなどの UnmanagedCode のクラスへのすべての参照も削除し、破棄された区画への参照も削除しました)。実は上司からここまでの行き方を教えてもらったのですが、自分でほぼ理解するまで指示を理解できませんでした。
これにより、クラスを含むすべてのアプリケーションをロードして再ロードできるようになりました。理論的には。実際には、アプリケーションの新しいバージョン (以前は区画に含まれていたコード) をロードしようとすると、イメージは完全にハングアップしました。
クラッシュはコードが管理されていないこととはまったく関係がないことが判明しましたが、問題の区画が変更されたという事実があり、InputState>>process:
クラス変数の欠落および/または初期化されていないために例外が発生しました (InputState>>initialize
メソッドが呼び出されませんでした新しいprocess:
方法が導入されるまで)。Notifier
何が起こっているのかを調べるために、すべての例外をファイルにダンプするようにクラスを変更する必要がありました。クラス変数をクラスのソースに追加し (リフレクション経由で追加するのではなく)、入力処理スレッドを一時停止toBeLoadedCode
してメソッドで再起動しloaded
、新しいバージョンのアプリケーションを作成することで、この問題も解決しました。
これで、理論的にはすべてが機能します。WindowSystem または VisualworksBase アプリケーションをリロードすると初期化ブロックが実行され、フォントとフォント サイズ、ウィンドウの色、UI 設定など、多くの設定がデフォルトにリセットされるため、実際にはまだ使用できません。設定をファイルに保存して後で読み込むか、すべての設定を確認するだけの方法のようです (公式の [設定] メニューにすべてが表示されないか、大幅に調整された画像があります...ゼロから再構築するのはこれで十分です)。しかし、それはまったく別の質問です。