[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 メーリングリストの案内