- 2008年6月24日 00:00
- しらべる
FlexBuilder3のProfessional版に付属しているFlexプロファイラが便利です。
メモリに展開されているオブジェクトをインスタンス単位で確認できるので、メモリリークの調査などに重宝しています。
が、ここで一つ罠が。
プロファイラでしばらく調べた後、デバッグモードで実行したら、アプリがスタートしない。。。全てのブレークポイントを外すと再生されるけど、ブレークポイント一つでも有効にすると動かない。
ログを見ると、ソースファイルの検索でエラーが出てる
java.lang.NullPointerException at com.adobe.flexbuilder.debug.breakpoints.FlexLineBreakpoint.findSourceFiles(FlexLineBreakpoint.java:388) at com.adobe.flexbuilder.debug.breakpoints.FlexLineBreakpoint.instantiate(FlexLineBreakpoint.java:442) at com.adobe.flexbuilder.debug.model.FlexDebugTarget.breakpointAdded(FlexDebugTarget.java:889) at com.adobe.flexbuilder.debug.model.FlexDebugTarget$FdbThread.installDeferredBreakpoints(FlexDebugTarget.java:539) at com.adobe.flexbuilder.debug.model.FlexDebugTarget$FdbThread.advanceStateMachine(FlexDebugTarget.java:570) at com.adobe.flexbuilder.debug.model.FlexDebugTarget$FdbThread.access$6(FlexDebugTarget.java:544) at com.adobe.flexbuilder.debug.model.FlexDebugTarget$1.run(FlexDebugTarget.java:646) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.runtime.Platform.run(Platform.java:857) at com.adobe.flexbuilder.debug.model.FlexDebugTarget$FdbThread.eventLoop(FlexDebugTarget.java:626) at com.adobe.flexbuilder.debug.model.FlexDebugTarget$FdbThread.run(FlexDebugTarget.java:687) at java.lang.Thread.run(Thread.java:619)
しかも、デバッグコンソールになぞの一文
[SWF] C:/development/projects/eclipse/workspace/eclipse3.3/.metadata/.plugins/com.adobe.flash.profiler/ProfilerAgent.swf - 17,476 バイト (圧縮後)
あれ?ProfilerAgentってプロファイラじゃないんですけど、、、
と思って調べてみたら、プロファイラ実行のときに起動されるProfilerAgent.swf が
デバッグをブロックしてるらしい。
こちらに回避策が載ってました。
ProfilerAgent.swf preventing debugging
デバッグプレーヤーの設定ファイル、mm.cfgのProfilerAgent.swfの記述のある一行を削除したら無事動きました。そのままプロファイラも普通に動きます。
mm.cfgファイルは以下の場所にあります。
- Macintosh OS X /Library/Application Support/Macromedia
- Windows 2000/XP C:¥Documents and Settings¥[username]
- Windows Vista C:¥Users¥[username]
Flashまわりは聞いてねーよーってことが多いですね。
