Flexを利用したActionScript開発では、デバッグがボトルネックになることがしばしばあります。 プリントデバッグを利用するのも一苦労です。 私が開発中によく利用している方法をご紹介します。 ActionScriptで手軽に関数を利用するには無名パッケージでグローバルに関数を定義し、それをソースパスにふくめるのが便利です。 私は、以下で紹介されているlog関数などの便利関数を開発中のみソースパスに含めています。 http://subtech.g.hatena.ne.jp/secondlife/20070219/1171872801 この方法のメリットは以下の通り
  • 無名パッケージだからいちいちパッケージをimportしなくていい。
  • クラスじゃなくて関数だからインスタンスをつくる必要もない(ActionScriptでは、ファイル名と関数名を同じにすることでグローバル関数を定義できます)。
では、これらのソースコードを開発中のみ読み込むようにするにはどうすればいいでしょう? 方法は簡単で、デバッグ用のXMLを用意します。Flexではビルド時の設定をxmlファイルで指定できるのでそれを利用します。 以下をdebug-config.xmlという名前で保存。開発中は、こちらの設定ファイルを読み込むようにします。 source-pathを設定しているのは、便利関数をオートロードするため。 debug を true に設定することでエラーメッセージにソースコードの行数も載るようになります。
<flex-config>
  <compiler>
    <debug>true</debug>
    <source-path append="true">
      <path-element>./</path-element>
    </source-path>
  </compiler>
</flex-config>
mxmlcのオプションに以下を指定し、上のファイルをコンパイル時に読み込みます。
-load-config+=/path/to/debug-config.xml
私はrascutというビルド用ツールを使っているのですが、rascutを使用する場合、rascutは以下のようにします。こちらのオプションを rascut起動用のスクリプトに書き込んでおき、デバッグ用xmlを読み込まないスクリプトと読み込むスクリプトを、「開発中ビルド用」「製品版ビルド用」で使いわけています。 -start-rascut-dev.bat
rascut -c"-load-config+=/path/to/debug-config.xml" some.mxml
以下、デバッグ中にロードする便利関数を紹介します。まずは先にあげたlog関数です。 log関数の他にも以下のような関数を利用しています。 (先ほどの、debug-config.xmlと同じディレクトリにおけば、これらの関数もオートロードされるようになります。ファイル名と関数名を同じにする必要があるので気をつけてください)。 -dump.as dump関数。オブジェクトを文字列にダンプする関数。ObjectUtilクラスを利用しているだけですが、いちいちパッケージをimportする必要がないのでデバッグ中に重宝します。
package {
    import mx.utils.ObjectUtil;

    public function dump(a:*):String {
        return ObjectUtil.toString(a);
    }
}
-alert.as alert関数。アラートウィンドウをどこからでも使えるようにする関数。
package {
    import mx.controls.Alert;
    public function alert(...r):void {
        var a:* = r[0];
        if(a is String)
            Alert.show(a);
        else
            Alert.show(dump(a));
    }
}