特定の場合にフリーズする Adobe Flash 10 プログラムを持っていますが、Flash Player のリリース バージョンで実行している場合に限られます。デバッグ バージョンでは、アプリケーションは正常に動作します。
このような問題をデバッグする最善の方法は何ですか? コンピューターにリリース プレーヤーをインストールし、何らかの非グラフィカルな出力方法を設定しようと考えました (ログ ファイルなどを書き込む方法があると思いますか?) が、リリースととにかくインストールされたデバッグバージョン:( .
編集:わかりました、フラッシュプレーヤーのバージョンをリリースバージョンに置き換えることができ、フリーズはありませんでした...だから、これまでにわかっていることは:
Flash: Debug Release
Vista 32: works works
XP PRO 32: works* freeze
- これをテストするために必要なデバッグプレーヤーを彼らに渡しました
うーん、私のコードのエラーではなく、プレーヤーのバグのように見えます (すべての場合で 10.0.45.2)... 少なくとも、フリーズした時点でコールスタックを確認したいと思います。たとえば、フラッシュにlog.txtまたは問題のコードに挿入できる「トレース」のような機能を書き出すなど、さまざまなビットやピースをインストールする必要なく、それを行う方法はありますか?
EDIT2:XP 32ビットを使用している別の人にswfを渡したところ、同じ結果になりました:(
EDIT3:わかりました、flash.external.ExternalInterface.call("alert", "..."); を広範囲に使用します。問題の原因となっている正確な行を見つけることができました(例外処理コードも改善したため、フリーズするのではなく、「未処理の」例外があることがわかりました)。現在の問題は、一部のマシンのリリースプレーヤーでこれに関連するフラッシュの問題です...
particles.push(p);
上記のプラットフォームで TypeError #1034 が発生します。Particles は Vector.<Particle>、p は Particle です。getQualifiedClassName でテストしたところ、次の結果が得られました。
getQualifiedClassName(p) = ::Particle
getQualifiedClassName(particles) = __AS3__.vec::Vector.<::Particle>
これが問題である理由と、それを機能させるために何をすべきかについてのアイデアはありますか?
EDIT4:
わかりました私はこれを解決したようです。Particle クラスは、それを使用するアクション スクリプト ファイル内のパッケージ {...} の後にある単純な内部クラスです。これを独自のファイル (particle.as) に移動し、パッケージ内の適切なパブリック クラスにして、問題を解決しました。
フラッシュのバグかもしれないし、ベクターなどで内部クラスを使用しないというメモを見逃したのかもしれませんが、その場合は、(コンパイル時またはデバッグ ランタイムのいずれかで) 明示的に禁止することを期待していたでしょう。 「private varparticles:Vector.<Particle>;」のエラー ライン。機会があれば、これか何かについて Adobe フラッシュ チームに問い合わせてみようと思います。
元の質問の行に沿ったものだと思うデバッグのヒントを提供してくれてありがとう:)