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