私が得ているスタックアンダーフローを解決するのに本当に苦労しています。実行時に取得するトレースバックは次のとおりです。
VerifyError: エラー #1024: スタック アンダーフローが発生しました。 flash.events::EventDispatcher/dispatchEventFunction() で flash.events::EventDispatcher/dispatchEvent() で flash.net::URLLoader/onComplete() で
これは、デバッグ モードで実行するとまったく発生しないため、デバッグが特に困難です。リリースとしてコンパイルされた場合にのみ発生します。
スタックアンダーフローをデバッグする方法に関するヒントはありますか? それが Flash にとって何を意味するかについて明確な説明がありますか?
それが役立つ場合、このエラーは、ハンドラーが URLLoader、AsyncToken を使用する RPC 呼び出しを行い、AsyncToken に関連付けられた AsyncResponder インスタンスのセットを呼び出すボタンをクリックすると発生します。一部のサーバー側のログと、swf にハッキングされた一部のログにより、UrlLoader が正常に実行され、crossdomain.xml ファイルを GET し、正しく処理されていることがわかります (つまり、それを破壊した場合、セキュリティを取得します)エラー)、また「ロード」リクエストを正常に完了しています (サーバーがデータを送信します)。アンダーフローは、Event.COMPLETE のリッスン/処理プロセスで発生しているようです (もちろん、トレースバックでも暗示されています)。
使用される mxmlc = flex_sdk_4.5.0.20967 から
プレーヤーの例 (いくつか試しました) = 10.2.153.1
更新:私の特定の問題は解決されました...しかし、特定の解決策を得るのではなく、そのような問題を一般的にデバッグする方法を知りたいので、質問をそのままにしておきます。
私のコードには、次のアプリケーション定義がありました。
<s:Application height="100%" width="100%"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
initialize="InitData();">
コードがinitialize
イベントに添付されている/添付されていたことに注意してください。
InitData() と関連する定義は次のとおりです。
import classes.RpcServerProxy;
public var SP:RpcServerProxy;
public function InitData():void {
SP = new RpcServerProxy("http://192.168.1.102:1234");
}
InitData() 呼び出しを(J_A_X に感謝します!)onCompletion
代わりにイベントに切り替えると、問題は完全に解消されます。initialize
Event.COMPLETE イベント ハンドラ (スタック トレースの onComplete) がグローバル SP オブジェクトを使用していたようです。リリース (vs デバッグ) コンパイルに関する何かが、SP 変数の初期化の開始タイミングに影響を与えていたに違いありません。ハンドラーを後でonCompletion
イベントに移動すると、すべての問題が解決しました。
上記のように、このような初期化の問題をデバッグするために利用できるトリック/ツールを知りたいです。
更新 2:
applicationComplete
creationComplete
アプリケーションの初期化コードを配置するよりも優れたイベントのようです。説明についてはこのブログエントリを参照してください。また、単純な「アプリケーションの開始」データ初期化の例については、Adobe Tech Evangelist によるこのビデオ(4:25 あたり) を参照してください。