[Seasar-user:8160] Re: Dolteng(S2Flex2+S2Dao) 環境で、Moduleの内部でブレークポイントが停止しない。
kondo
[E-MAIL ADDRESS DELETED]
2007年 6月 7日 (木) 17:28:19 JST
近藤です。
ブレークポイントが止まらない件ですが原因がわかりました。
Flexで作成されたアプリケーションは、通常版"xxx.swf"とデバッグ版
"xxx-debug.swf"に分かれて生成されるのが原因でした。
ブレークポイントは、デバッグ版のswfでのみ利用することができません。
アプリケーションを直接実行する場合、"実行"の場合は、xxx.swfを、"デバッグ
"の場合はxxx-debug.swfを実行するようになっている為、ブレークポイントを使
用することができます。
これに対して、SWFLoader/ModuleLoaderでswfをロードする場合には、他の
アプリケーションから間接的に呼び出される為、SWFLoader.url="xxx.swf"
ModuleLoader.url="xxx.swf"としてよびだした場合、起動元のアプリケー
ションがデバッグ版だとしても、そこからロードされたswfが通常版である
為、ブレークポイントが利用できなかったようです。
実験として、ModuleLoaderでロードするモジュールを-debug.swfを指定して
"デバッグ"を行ったところ、ブレークポイントが利用できるようになりました。
デバッグの度に呼び出すモジュール名を変更するのはめんどうなので、実行元
アプリケーション(swf)が通常起動かデバッグ起動かを判断して、ロードする
swfファイル名を切替えるクラスを別途作成し、ロード部分に噛ませることで
対応してみました。
■swfファイル名を切替えるクラス
package com.nobu
{
import mx.core.Application;
public class SwfNameUtil
{
public static function getLoadSwfName(swfname:String):String
{
if
(Application.application.systemManager.loaderInfo.url.indexOf("-debug.swf")
> -1)
{
return swfname + "-debug.swf";
}
else
{
return swfname + ".swf";
}
}
}
}
■SwfNameUtilの使い方
// moduleIdには拡張子を含めないファイル名を設定
module.url = SwfNameUtil.getLoadSwfName(moduleId);
module.loadModule();
module.addEventListener(ModuleEvent.READY,moduleOnReady);
デバッグかどうかの判断は、それらしい設定値が見付からなかったので、
ルートアプリケーション"Application.application"のurlプロパティ・・・
つまり、ルートswfのファイルパスに"-debug.swf"が含まれていれば
デバッグであるという判断をしています。
なかなか難儀な内容でした。
以上、報告でした。ひがさんをはじめ、かかわってくださった皆さんに
感謝です。ありがとうございました。
FxUGフォーラムの元ネタは以下。(完結しています)
http://www.fxug.net/modules/xhnewbb/viewtopic.php?viewmode=flat&topic_id=905&forum=15
Seasar-user メーリングリストの案内