私はいくつかのフラッシュアプリに取り組んでいます。ここで、顧客側をテストするために、ログを保存してエラー メッセージを表示する Flash Player デバッガー バージョンを使用できます。顧客側に展開すると、通常の Flash Player バージョンが使用されます。つまり、エラーが発生した場合にエラー メッセージにアクセスできなくなります。そのため、すべてのトレース メッセージをコードとエラー テキストでキャプチャするツールを装備したいと考えています。かなり単純なトレース メッセージについては、コード内の関数をオーバーライドして、トレース メッセージを含む POST 要求をロガー サーバーに送信するだけですが、エラー メッセージを取得するにはどうすればよいでしょうか? これまたは誰かが提案できるトリックに対する既知のアプローチはありますか?
2 に答える
ブラウザのデフォルトとして Flash のデバッグ バージョンをインストールできます (Chrome では、組み込みプレーヤーを無効にする必要があります)。したがって、ユーザー エクスペリエンスをテストしてデバッグする場合は、これが理想的なソリューションです。
ただし、質問に答えるには、すべてのエラーを普遍的にキャッチしてリダイレクトする方法はありません (私が知っている)。問題のコードを事前にtry...catch
ステートメントでカプセル化し、プロパティを に送り返す必要がありますcatch
。例えば:
try {
this["foo"]();
} catch (e:Error) {
trace(e);
}
デバッグ バージョンでは、トレースされた値は次のようになりますTypeError: Error #1006: value is not a function.
。標準バージョンでは , (特に説明の少ないエラー) のみが出力さTypeError: Error #1006
れますが、エラーが発生した場所への参照はありません。これを取得するには、Error.getStackTrace()を使用して、コール スタックとエラーが発生した行を確認する必要があります。デバッグでは、これにより次が出力されます。
TypeError: Error #1006: value is not a function.
at Shell_fla::MainTimeline/init()[C:\Projects\shell.as:91
標準クライアントでは、がっかりしnull
ます。つまり、クライアント バージョンから貴重な情報を取得することはできません。
私ができる最善のアドバイスは、独自のカスタム エラー レポートを使用して問題のコードを記述することです。たとえば、IO エラーをキャッチし、ロードに失敗したファイルをトレースするかobject.foo
、if (object.hasOwnProperty("foo")) { // do something } else { trace("foo not found in " + object.name) }
. 防御的にコーディングします。
乾杯、
StackOverflow でこの投稿を発見しました: Flex ですべての例外をキャッチする方法は?
それは私の質問に答えます。質問する前にグーグルで調べていたときに遭遇しなかったのは奇妙なことです。