异想天开

What's the true meaning of light, Could you tell me why

flex调试

日期:2014-10-29 11:17:14
  
最后更新日期:2015-05-25 16:26:46
【技术】
flex调试需要安装调试版本的flash,笔者的系统为windows 8.1。ie 11 和 chrome自动了flash插件,并且windows的flash更新,会以windows打补丁的方式。
firefox需要自己安装调试版本的flash。跟笔者系统不一样的windows,用ie调试可能需要安装那个有activex字样的debuger flash插件,上面注明了“for windows”。windows 8.1系统ie自带的flash,调试之前需要安装补丁,这个补丁笔者是在adobe下载界面里安装"Download the Flash Player for Windows 8.1 x64 debugger"后,就会自动下载一个补丁KB2867622,并且adobe官网也提醒了你需要记住该kb number方便后续卸载。编译mxml或as代码时,主要命令行要加上-debug=true,开启调试模式。
1.调试方法
调试方法一是在代码里面加上trace语句,这样fdb时,就可以看到输出信息。由于笔者的fdb,只能看到trace日志,看不到源码,所以还是比较麻烦。大概的方法还是同加大量的printf语句类似。
调试方法二和JavaScript联合调试,比如:
[code lang="cpp"]
import flash.display.*;
import flash.external.ExternalInterface;
ExternalInterface.call('alert', "hello world");
[/code]
调试方法三是在firebug里面调试JavaScript,来看日志输出。
[code lang="cpp"]
ExternalInterface.call('console.log', "string is [%s]", "abcde");
[/code]
这里备忘下参考2的类似printf的代码:
[code lang="cpp"]
package {
import flash.external.ExternalInterface;
import flash.utils.getQualifiedClassName;

public function log(... args):void {
var inspect:Function = function(arg:*, bracket:Boolean = true):String {
var className:String = getQualifiedClassName(arg);
var str:String;

switch(getQualifiedClassName(arg)) {
case 'Array':
var results:Array = [];
for (var i:uint = 0; i < arg.length; i++) {
results.push(inspect(arg[i]));
}
if (bracket) {
str = '[' + results.join(', ') + ']';
} else {
str = results.join(', ');
}
break;
case 'int':
case 'uint':
case 'Number':
str = arg.toString();
break;
case 'String':
str = arg;
break;
default:
str = '#<' + className + ':' + String(arg) + '>';
}
return str;
}

var r:String = inspect(args, false);
trace(r)
ExternalInterface.call('console.log', r);
}
}
[/code]
保存为log.as。放到mxml文件相同的目录,在mxml文件里面加上log函数就可以输出日志,用mxmlc单独编译mxml文件即可。

2.64位的windows下安装了64位的jre,32位flex sdk。
由于flex sdk默认32位的,需要自己写个批处理,配置java虚拟机,调用mxmlc和fdb。在flex sdk的bin目录里面,添加mxmlc64.bat。内容如下:
[code lang="cpp"]
"%JAVA_HOME%\bin\java.exe" -Xmx384m -Dsun.io.useCanonCaches=false -jar "%~dp0..\lib\mxmlc.jar" +flexlib="%~dp0..\frameworks" %*
[/code]
同理添加fdb64.bat。
参考1:
1.http://helpx.adobe.com/flash-player/kb/uninstall-flash-player-windows.html
2.http://blog.minidx.com/2008/05/27/875.html