AS3,Flash:在代码中访问错误消息文本

时间:2013-10-17 06:55:26

标签: actionscript-3 flash logging error-handling error-logging

我正在制作一些Flash应用。现在,为了测试客户端,我可以使用Flash Player调试器版本来保存日志并显示错误消息。当它部署在客户端时 - 它们将具有常规Flash Player版本,这意味着如果发生错误,我将无法访问错误消息。所以我想为它配备一些工具,它可以捕获代码和错误文本中的所有跟踪消息。对于相当简单的跟踪消息,我只是覆盖我的代码中的函数,因此它向跟踪器服务器发送带有跟踪消息的POST请求,但是如何获取错误消息呢?是否有人知道这种或某种技巧的已知方法?

2 个答案:

答案 0 :(得分:1)

您可以安装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。简而言之,您无法从客户端版本中获取任何有价值的信息。

我能给出的最佳建议是使用您自己的自定义错误报告来编写问题代码。例如,捕获IO错误并跟踪无法加载的文件,或者如果您期望object.foo,请先尝试if (object.hasOwnProperty("foo")) { // do something } else { trace("foo not found in " + object.name) }。代码防守。

干杯,

答案 1 :(得分:1)

我在StackOverflow上发现了这篇文章: How to catch all exceptions in Flex?

它回答了我的问题,奇怪的是,我在谷歌搜索之前没有碰到它。