Home > papervision3d > ActionScript3.0の標準デバッガのfdbを使う方法

ActionScript3.0の標準デバッガのfdbを使う方法

ActionScript3.0のデバッグは難しい。
というのもプログラミングで定番のプリントデバッグができないからです。

そこで便利なのがデバッガ。
FlexBuilderではコーディングしながらデバッガを利用できて非常に便利です。
しかし、有料。日曜プログラマには少々お高い。

そこで登場するのが標準デバッガのfdb。
コマンドラインでの実行になりますので、少し敷居は高いかもしれませんが、デバッガを使うぐらいの人なら問題ではないと思います。(私は基本的にコマンドラインでActionScript3.0をコンパイルしています)

下準備
デバッグ用Flash Playerをインストールする

Flex SDK2を取得していれば、デバッグ用Flash Playerは以下のフォルダにあります。

flex_sdk_2/player/debug

Windows用なら「Install Flash Player 9.exe」を、Mac用なら「SAFlashPlayer.dmg」をマウントして「SAFlashPlayer.app」をインストールして下さい。

ちなみにこの「SA」は「Stand Alone」の意味です。

SWFファイルをアプリケーションに関連づける

fdbを実行するとSWFに関連づけられているアプリケーションが実行されます。
これが上でインストールしたアプリケーションでなければなりません。
ということでSWFファイルをFlash Playerに関連づけて下さい。

Macでの方法を示しておきます。

SWFファイルを右クリックしこのアプリケーションで開くを選択。

そこでその他を選択。

アプリケーションを選択するウィンドウが開きますので、「SAFlashPlayer」を検索します。

SAFlashPlayer.appを選択して「常にこのアプリケーションで開く」にチェックを入れておきます。
これで準備完了です。

デバッグ用にコンパイル

ActionScript3.0をmxmlcコマンドでコンパイルするのですが、その時にデバッグモードというオプションを付ける必要があります。デバッグオプションは私の知る限り3通り指定方法があります。

オプションをコマンドライン上で付ける方法は2通りあります。

%mxmlc -debug=true AmazonWebservice.as

もしくは

%mxmlc -compiler.debug AmazonWebservice.as

これでデバッグ用のコンパイルが完了します。

毎回デバッグオプションを付けるのが面倒であれば、configファイルに設定しておくとラクです。
AmazonWebservice-config.xml

<flex-config>
  <compiler>
    <debug>ture</debug>
  </compiler>
</flex-config>
%mxmlc AmazonWebservice.as

これでデバッグモードでコンパイルされたSWFファイルが生成されました。

fdbを実行する

ではさっそくfdbを実行します。
実行は至って簡単です。

%fdb AmazonWebservice.swf

このコマンドを実行するとfdbコマンドプロンプトが起動します。

(fdb)

fdbのコマンドは沢山ありますが、とりあえず以下の4つぐらいを覚えておけば良いと思います。

  • c (continue): 実行を継続する
  • b (break): ブレークポイントを指定する
  • n (next): プログラムを一行実行する
  • p (print): 変数の値を表示する

長いコマンドを打つのは疲れるので左側の省略版のコマンドが便利です。

サンプルを用いてfdbを実行する
Sample Source Code

今回用いるサンプルは前回のエントリ「Amazon Web ServiceをActionScript3.0から利用する方法」のソースコードです(ちょっとだけ変更しています)。

[AmazonWebservice.as]

package {
  import flash.display.Sprite;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.events.Event;
 
  public class AmazonWebservice extends Sprite
  {
    private var loader:URLLoader;
 
    public function AmazonWebservice()
    {
      var url:String = "http://webservices.amazon.co.jp/onca/xml?"
                     + "Service=AWSECommerceService&"
                     + "AWSAccessKeyId=[アクセスキーID]&"
                     + "Operation=ItemSearch&"
                     + "SearchIndex=Books&"
                     + "Keywords=actionscript&"
                     + "ResponseGroup=Request,Small";
      loader = new URLLoader();
      loader.addEventListener(Event.COMPLETE, completeFnc);
      loader.load(new URLRequest(url));
    }
 
    private function completeFnc(event:Event):void {
      var ns:String = "http://webservices.amazon.com/AWSECommerceService/2005-10-05";
      default xml namespace = new Namespace(ns);
      var xml:XML = new XML(loader.data);
 
      var asin:String;
      for each(var item:XML in xml..Item) {
        asin = item.ASIN[0];
        trace(asin);
      }
    }
  }
}
コンパイル

まずはデバッグオプション付きでコンパイルします。

%mxmlc -debug=true AmazonWebservice.as
fdbを実行

fdbを起動します。

%fdb AmazonWebservice.swf
ブレークポイントを設定する

AmazonWebservice.asファイルの33行目にブレークポイントを設定します。

(fdb)b 33

ちなみにブレークポイント等の情報を表示してみます。

(fdb)i b
Num Type Disp Enb Address What
1 breakpoint keep y 0×00000000 の場所にある completeFnc() 内 AmazonWebservice.as:33

コマンドの「i b」とは「info breakpoints」の省略形です。
infoコマンドはその他にも色々な情報を取得できます。

info サブコマンドのリスト :

  • info arguments (i a) 現在のスタックフレームの引数の変数です。
  • info breakpoints (i b) ユーザーが設定可能なブレークポイントのステータスを表示します。
  • info display (i d) auto-display 式のリストを表示します。
  • info files (i f) デバッグ中のターゲットとファイルの名前を表示します。
  • info functions (i fu) すべての関数名を表示します。
  • info handle (i h) 失敗の処理方法を表示します。
  • info locals (i l) 現在のスタックフレームのローカル変数です。
  • info sources (i so) プログラムのソースファイルを表示します。
  • info stack (i s) スタックのバックトレースです。
  • info swfs (i sw) このセッションの swf のリストです。
  • info targets(i t) デバッグ中のアプリケーションです。
  • info variables (i v) すべてのグローバル変数と静的変数の名前を表示します。

横道にそれました。

実行を続けます

ブレークポイントまでプログラムを走らせます。

(fdb)c
理由 : ブレークポイント 1、関数名 : completeFnc()、場所 : AmazonWebservice.as:33
33 trace(asin);

continueコマンドでプログラムをブレークポイントまで走らせられます。
ブレークポイントを設定した通りAmazonWebservice.asの33行目でプログラムが停止しています。
この状態で色々なデバッグを行います。

変数の値を取得します

変数「asin」に格納された値を取得します。

(fdb)p asin
$1 = “4881665901″

ASIN値が取得できました。素晴らしい。

ちなみに、E4Xで値を取得する事ができません。

(fdb)p item.ASIN[0]
変数 ASIN が不明です
式を評価できませんでした。

ん〜…他に何か方法があるのでしょうか…。

さらにプログラムの実行を進めます。

(fdb)c
理由 : ブレークポイント 1、関数名 : completeFnc()、場所 : AmazonWebservice.as:33
33 trace(asin);

forループを一周し、再び33行目で停止しました。

再び変数「asin」の値を取得してみましょう。

(fdb)p asin
$2 = “4839917396″

現在デバッグ中のプログラムを終了するには「k(kill)」コマンドです。

(fdb)k
デバッグ中のプログラムを強制終了しますか? (y または n) y

fdbを終了するには「q(quit)」コマンドです。

(fdb)q

ちなみに、fdbのコマンド一覧を取得するコマンドは「h(help)」です。

(fdb)h
fdb を初めて使用する場合は、’tutorial’ を実行し、基本情報を確認してください。
fdb コマンドの一覧 :
bt (bt) すべてのスタックフレームのバックトレースをプリントします。
break (b) 指定された行または関数にブレークポイントを設定します。
cf (cf) 現在のファイルの名前と番号を表示します。
clear (cl) 指定された行または関数のブレークポイントをクリアします。
condition (cond) ブレークポイントに対する条件式を適用または削除します。
continue (c) ブレークポイントで停止した後に実行を続行します。
commands (com) ブレークポイントに達したときに実行するコマンドを設定します。
delete (d) ブレークポイントまたは auto-display 式を削除します。
directory (dir) ソースファイルの検索パスにディレクトリを追加します。
disable (disab) ブレークポイントまたは auto-display 式を無効にします。
disassemble (disas) ソース行または関数を逆アセンブルします。
display (disp) auto-display 式を追加します。
enable (e) ブレークポイントまたは auto-display 式を有効にします。
file (fil) デバッグするアプリケーションを指定します。
finish (f) 現在の関数が返されるまで実行します。
handle (han) 失敗の処理方法を指定します。
help (h) fdb コマンドに関するヘルプを表示します。
home (ho) 実行を中止する箇所にリストの場所を設定します。
info (i) デバッグ中のプログラムに関する情報を表示します。
kill (k) デバッグ中のプログラムの実行を強制終了します。
list (l) 指定した関数または行を一覧表示します。
next (n) プログラムを次の段階に進めます。
print (p) 変数 EXP の値をプリントします。
pwd (pw) 作業ディレクトリをプリントします。
quit (q) fdb を終了します。
run (r) デバッグしたプログラムを起動します。
set (se) 変数の値を設定します。
source (so) ファイルから fdb コマンドを読み取ります。
step (s) 別のソース行に達するまで、プログラムを進めます。
tutorial (t) fdb の使用方法に関するチュートリアルを表示します。
undisplay (u) auto-display 式を削除します。
viewswf (v) swf に基づいて、ファイルの一覧表示のフィルタを設定またはクリアします。
what (wh) 変数のコンテキストを表示します。
where (w) bt と同じです。
詳細を確認するには、’help’ の後にコマンド名を入力します。
おわりに

今回はFlexBuilderがセレブ価格で庶民には手が届かないので無料のfdbを使ってActionScript3.0をデバッグしましょうという話。統合開発環境ぐらい無料で提供してほしいものです。ActionScript3.0の発展にも繋がる事ですし…。

関連のありそうなエントリ

Comments:0

Comment Form
Remember personal info

*
To prove that you're not a bot, enter this code
Anti-Spam Image

Trackbacks:0

Trackback URL for this entry
http://www.adamrocker.com/blog/151/actionscript30_flex_debugger_fdb.html/trackback/
Listed below are links to weblogs that reference
ActionScript3.0の標準デバッガのfdbを使う方法 from throw Life

Home > papervision3d > ActionScript3.0の標準デバッガのfdbを使う方法

Search
Feeds
Meta

Return to page top