2011-01-11 25 views
0

私は、呼び出されたときにメソッドの名前をトレースするスニペットを持っているかどうかを疑問に思いました。私はclassNameを見つけましたが、途中にありますが、メソッドのためのものではありません... 1行trace(...)は私が後にしているので、メソッド名の入力を避けて自分自身を間違えたままにしておきます。 これは、私がデバッガでステップスルーしたくないときに起こる注文をテストするためのものです。AS3で現在のクラスとメソッドの名前を取得

+0

2011-1-11-10-11に尋ねたが...それはクールだ –

答えて

3

デバッグ情報を使用してSWFをコンパイルし、あなたがErrorオブジェクトからgetStackTraceプロパティを見てみることができますプレイヤーのデバッグバージョンを使用している場合:

クイック例:

public function getCallingInfos():Object{ 
     var tmp:Array=new Error().getStackTrace().split("\n"); 
     tmp=tmp[2].split(" "); 
     tmp=tmp[1].split("/"); 
     return {namespaceAndClass:tmp[0], method:tmp[1]}; 
    } 

    var infos:Object=getCallingInfos(); 
    trace(infos.namespaceAndClass, infos.method); 
+0

リリース版ではどうなりますか? 'trace'は消えますか?あなたのメソッドは何も返さないでしょうか? –

+0

このサンプルメソッドは、リリース1ではなくデバッグ環境で使用されます。トレースの場合は、トレースオプションを省略するか、条件付きコンパイルを検索してデバッグモードで表示されるコードを検索しない限り、トレースは消えません。リリースではありません。 – Patrick

+0

プロダクション環境で問題が発生した場合でもエラーを追跡できるようにするには、Loggerクラスを使用し、ASコードではなく構成によってデバッグレベルを設定することを検討してください。 AS3のコモンズにロギングフレームワークがあります:http://code.google.com/p/as-commons/しかし、これまで私は自分のシンプルなLoggerクラスを書いており、かなり十分であることがわかりました。 – weltraumpirat

0
public static function getCurrentClassName(c:Object):String 
    { 
     var cString:String = c.toString(); 
     var cSplittedFirst:Array = cString.split('[object '); 
     var cFirstString:String = String(cSplittedFirst[1]); 
     var cSplittedLast:Array = cFirstString.split(']'); 
     var cName:String = cSplittedLast.join(''); 

     return cName; 
    } 

特定のクラスが構築されているかどうかを確認するために使用されます。

使い方(ここで私はメインクラスのコードを入れて):

trace('[DEBUG]: '+ClassData.getCurrentClassName(this)+' constructed.'); 

トレースリターン:

[DEBUG]: Main constructed. 
+0

それは必ずしも悪い解決策ではありませんが、あなたのクラスに実装されていない 'toString()'関数に依存しています – divillysausages

関連する問題