我正在开发一些Flash应用程序。现在,要测试它的客户端,我可以使用Flash Player调试器版本,该版本将保存日志并显示错误消息。在客户端上部署它时-他们将拥有常规的Flash Player版本,这意味着如果发生错误,我将无法访问错误消息。因此,我想为它配备一些工具,该工具可以在代码和错误文本中捕获我的所有跟踪消息。至于相当简单的跟踪消息,我只是在代码中覆盖了该函数,因此它会将带有跟踪消息的POST请求发送到记录服务器,但是如何保留错误消息呢?是否存在已知的方法或有人可以建议的技巧?
最佳答案
您可以将Flash的调试版本安装为浏览器的默认版本(在Chrome中,必须禁用内置播放器),因此,如果要测试和调试用户体验,这将是理想的解决方案。
但是,要回答您的问题:没有一种方法可以通用地捕获所有错误并重定向(据我所知)。您必须提前使用try...catch
语句封装问题代码,然后将属性发送回catch
。例如:
try {
this["foo"]();
} catch (e:Error) {
trace(e);
}
在调试版本中,跟踪值将为TypeError: Error #1006: value is not a function.
,而标准版本将仅输出TypeError: Error #1006
(一个明显的描述性错误),而我们所缺少的是对错误发生位置的任何引用。为此,我们需要使用Error.getStackTrace()查看调用堆栈和发生错误的行。在调试中,将输出以下内容:TypeError: Error #1006: value is not a function.
at Shell_fla::MainTimeline/init()[C:\Projects\shell.as:91
在标准客户端中,我们得到了令人失望的null
。简而言之,您无法从客户端版本中获取任何有值(value)的信息。我能提供的最佳建议是使用您自己的自定义错误报告来编写问题代码。例如,捕获IO错误并跟踪无法加载的文件,或者如果您期望使用
object.foo
,请首先尝试if (object.hasOwnProperty("foo")) { // do something } else { trace("foo not found in " + object.name) }
。防御性地编码。干杯,
关于actionscript-3 - AS3,Flash : Accessing error messages text in code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420131/