さて表題の件。printfデバッグさえできればある程度は書けますが、書いてるコード規模が大きくなって、厳しくなってきたので、環境を少し整える事にしました。
まずは結論から。以下の通り結構快適になりました。
before
- java-modeでasファイルを編集
- ログファイルにデバッグ出力して、tail -fで確認。
after
- actionscript-modeでasファイルを編集
- printfデバッグでキツいところはブレークポイント
- ctagsでタグテーブル作成してタグジャンプ
- rascutで自動コンパイル&ブラウザリロード
- log.as導入によりfirebug上でのログ確認
一つずつ見ていきます。
1. actionscript-modeでasファイルを編集
以前にactionscript-modeを入れようとして、挫折したので、java-modeで代用していました。これでも、あまり問題は無いのですが、for each構文等、部分的にインデントがずれるという事がありました。
そこで再度チャレンジしてみたところ、あっけなく動作しました。
ココからactionscript-mode.elをパスが通った場所に置いて、.emacsを編集するだけでOKです。
(require 'actionscript-mode)
(setq auto-mode-alist
(append '(("\\.as$" . actionscript-mode))
auto-mode-alist))
以前はcc-modeを古いバージョンを入れる必要があったと思うのですが、現在は必要ないようです。手元のバージョンは以下の通りです。
M-x c-version (cc-modeのバージョン)
Using CC Mode version 5.31.6
M-x version (emacsのバージョン)
GNU Emacs 22.3.1 (i386-apple-darwin9.6.0, Carbon Version 1.6.0) of 2009-01-03 on seijiz.local
2. printfデバッグでキツいところはブレークポイント
やはりprintfデバッグには限界がありまして、特にライブラリ等、他の人が書いたコードをデバッグする際はデバッガを使いたいと強く感じます。幸いにflex sdkにはfdbというgdb類似のデバッガが存在しますので、これを使う事にしました。emacs上から実行すればコマンド履歴も使えます。
M-x gdbで実行するデバッガを指定します。僕は/usr/local/flex/bin/fdbに置いています。
3. ctagsでタグテーブル作成してタグジャンプ
ブレークポイントを張れるようになったのは良いのですが、ステップ実行をやっているとタグジャンプをしたくなります。ただgtags,etags,ctagsがいずれもActionScriptに対応しておらず、タグファイルが作れない!と一時は悶絶したのですが、幸いctagsをActionScriptに対応させる方法が見つかりました。
手順は以下の通り。
$ wget http://prdownloads.sourceforge.net/ctags/ctags-5.7.tar.gz
$ tar zxvf ctags-5.7.tar.gz
$ cd ctags-5.7
$ wget http://www.turdhead.com/downloads/actionscript.c
$ cp source.mak source.mak.bak
$ vim source.mak
$ diff -U 1 source.mak.bak source.mak
@@ -10,2 +10,3 @@
SOURCES = \
+ actionscript.c \
args.c \
@@ -61,2 +62,3 @@
OBJECTS = \
+ actionscript.$(OBJEXT) \
args.$(OBJEXT) \
$ cp parsers.h parsers.h.bak
$ vim parsers.h
$ diff -U 1 parsers.h.bak parsers.h
@@ -18,2 +18,3 @@
#define PARSER_LIST \
+ ActionScriptParser, \
AsmParser, \
$ ./configure
$ make install
上記手順でActionScriptに対応したctagsができるので、あとは-eオプションを使用して、Emacs用のタグファイルを出力させれば、漸くEmacs上でActionScriptのタグジャンプが出来るようになります。
4. rascutで自動コンパイル&ブラウザリロード
今まで知らなかったのですが、rascutというツールを使うと、コンパイルとブラウザによるswf実行を自動化してくれます。これは実際に使ってみないと便利さが伝わらないかもしれませんが、凄く良いリズムで開発出来るようになります。一度は騙されたと思って使ってみるのが良いと思います。
手元では以下でインストールできました。
gem update --system
gem install rascut --include-dependencies
使い方はココを参考にさせて頂きました。なお言語設定等で問題が起こるらしい記述が結構見つかりましたが、手元では発生していません。
5. log.as導入によりfirebug上でのログ確認
個人的にはrascutとセットで導入すると効果が高いと思います。デフォルトのtraceだとログファイルにデバッグ出力ですが、この関数を導入するとfirebug上でログの確認が出来ます。これでterminalでtail -fしてた人はterminalが必要なくなりますし、emacs上のshellでtail -fしてた人もログ用のバッファを表示しなくても良くなるので画面が広くなります。
インストール、使い方はココを参考にさせて頂きました。
以上で、今回行った設定は終了です。環境も整ったところで、ガリガリコード書いていきまっしょい。ちなみにFlexBuilderはインストールしてみたのですが、ぱっと動かなかったので断念しました。
発見。こんにちは、山本研OBの佐藤です。ちょっと申し伝えたいことがあるので連絡ください。(こんなとこに変なコメント書いてすいません。見たら消してください)