37

コードの任意の関数でスタック トレースを確認したいので、次のようなものを呼び出してスタック トレースを出力します。

public function PrintStackTrace() {
    try {
        throw new Error('StackTrace');
    } catch (e:Error) {
        trace(e.getStackTrace());
    }
}

これを行う他の方法があるかどうかを知りたいです。エラークラスがどこかでスタックトレースを作成するのですが、もしかしたらActionScript 3.0ではできなかったので無理かもしれませんが知りたいです。

ありがとう!

4

8 に答える 8

51

私の知る限り、独自のコードでスタック トレースを利用できるようにする唯一の方法は、既に行っているように、Error クラスのgetStackTrace()メソッドを使用することです。ただし、質問の例に応じて、実際にエラーをスローする必要はありません。エラーを作成してメソッドを呼び出すだけです。

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

また、ドキュメントにあるように、これは Flash Player のデバッグ バージョンでのみ機能するため、必要に応じてCapabilities.isDebuggerの値をチェックする if ブロックでこの機能をラップできます。

于 2008-09-29T15:29:53.993 に答える
8

Flash Player 11.5から、スタックトレースは非デバッガーバージョンのプレーヤーでも利用できます。

于 2013-02-10T23:52:55.830 に答える
6

FlexSDKに付属のFlexDeBugger(FDB)を使用します。これはコマンドラインデバッガーであり、オンラインでも.swfをデバッグできます(デバッグバージョンの場合)。ブレークポイントの設定、変数の印刷/変更、スタックのダンプが可能であり、余分なコードを追加する必要はありません。なくてはならない非常に便利なツールです!

必要なfdbオプションは、「break」で実行を停止するクラスと行を指定し、「bt」または「infostack」でスタックのバックトレースを提供します。また、実行中にアプリケーションに関するほとんどすべてを表示することもできます。

于 2010-10-13T15:18:35.977 に答える
2

私はこの小さな機能をまとめました:

public static function getStackTrace() : String
{
    var aStackTrace : Array = new Error().getStackTrace().split("\n");
    aStackTrace.shift();
    aStackTrace.shift();
    return "Stack trace: \n" + aStackTrace.join("\n");
}

開発時にアプリで使用するカスタム「デバッグ」クラスにこの関数があります。2 つの shift() 呼び出しにより、最初の 2 行が削除されます。最初の行は単なる文字列 "Error" であり、2 行目はこの関数自体を参照しているため、役に立ちません。別の shift() 呼び出しを追加することで、必要に応じて 3 行目 (getStackTrace() 関数の呼び出しを行う行を指します) を削除することもできますが、"stack痕跡"。

于 2016-03-29T16:52:11.823 に答える
2

@hassegは正しいです。SWF をコンパイルするときに -compiler.verbose-stacktraces=true を指定することで、リリース バージョン (デバッグではない) でスタック トレース情報を保持することもできます。

于 2012-02-06T08:52:21.753 に答える
1
var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

このstackTrace文字列を任意のファイルに書き込んで、実行モードでもプログラムのログを確認できるようにします。したがって、デバッガー モードでのみ実行する必要はありません。uncaughtexception最後に実行されるように、アプリケーションのイベントに書き込みます。

于 2013-12-18T13:14:20.613 に答える
1

Flash 11.5 以降、スタック トレースは Flash のリリース バージョンで機能します。

ただし、これがもはや問題ではないというわけではありません。アプリケーションが で 11.5 より古いコンパイラを使用するように設定されている場合、Flash Builder --> Project properties --> ActionScript Compilerスタック トレースはありません。

さらに、同じページで AIR SDK のバージョンを確認できます。v3.4 以前を使用している場合、スタック トレースは表示されません。これが問題である場合は、すべての開発者がこちらの手順に従って AIR SDK を更新する必要があります。

于 2014-08-25T19:38:48.097 に答える
0

このgetStackTraceメソッドは、デバッグ Flash プレーヤー ( https://www.adobe.com/support/flashplayer/debug_downloads.html ) でのみスタック トレースを返し、リリース プレーヤーで を返しますnull。デバッグ プレーヤーがインストールされ、実行されていることを確認します。

-compiler.verbose-stacktraces=true、デバッグ スタック トレースに行番号を追加するだけです。

サンプルテスト: https://gist.github.com/pipeno/03310d3d3cae61460ac6c590c4f355ed

于 2016-07-11T09:10:01.270 に答える