首先,我不是在讨论播放器是否是调试器。 (编辑:它实际上与调试器播放器有关)
我使用mxmlc
使用-debug=false
编译一个非常简单的swf文件:
mac-108:tmp admin$ "/Applications/Adobe Flash Builder 4.7/sdks/4.6.0/bin/mxmlc" +configname flex -debug=true -static-link-runtime-shared-libraries=true Main.as
Loading configuration file /Applications/Adobe Flash Builder 4.7/sdks/4.6.0/frameworks/flex-config.xml
/Users/admin/tmp/Main.swf (987 bytes)
mac-108:tmp admin$
Main.as
:
package {
import flash.display.MovieClip;
import flash.text.*;
public class Main extends MovieClip {
public function Main() {
// Reference: http://stackoverflow.com/questions/185477/determine-if-swf-is-in-a-debug-player-or-mode
var st:String = new Error().getStackTrace();
var isDebugBuild:Boolean = (st && st.search(/:[0-9]+]$/m) > -1);
var my_st:String = "st: " + (st == null ? 'Null' : st);
var my_DR:String = isDebugBuild?"Debug":"Release";
var obj:TextField = new TextField();
obj.text = my_st + "\n" + my_DR;
this.addChild(obj);
}
}
}
然后我在Chrome浏览器中打开Main.swf
,但我看到了:
st:Null
Release
显然,我设置了-debug=true
,这是多么奇怪,为什么不确定swf是在调试还是发布工作中的流行方法。
但是,如果我将代码移动到Flash Builder 4.7,它会为我提供Debug
输出(而不是Release
)。
答案 0 :(得分:2)
事实证明,当SWF在调试模式下构建时,为了测试它是否处于调试模式,Flash Player也必须是使用Capabilities.isDebugger
的调试器。