【问题标题】:AS3, Flash: Accessing error messages text in codeAS3,Flash:访问代码中的错误消息文本
【发布时间】:2013-10-17 06:55:25
【问题描述】:

我正在开发一些 Flash 应用程序。现在,为了测试它的客户端,我可以使用 Flash Player 调试器版本来保存日志并显示错误消息。当它部署在客户端时 - 他们将拥有常规的 Flash Player 版本,这意味着如果发生错误,我将无法访问错误消息。所以我想为它配备一些工具,可以在代码和错误文本中捕获我的所有跟踪消息。至于相当简单的跟踪消息,我只是在我的代码中重写了该函数,因此它将带有跟踪消息的 POST 请求发送到记录器服务器,但是我怎样才能获得错误消息呢?是否有已知的方法或有人可以建议的一些技巧?

【问题讨论】:

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


    【解决方案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) }。防御性代码。

    干杯,

    【讨论】:

    • 感谢您的全面解释,Atriace!我会等待其他人是否有任何要添加的内容,并稍后将您的回复标记为答案。
    • 我已经检查了 getStackTrace() 上的链接 - 看起来它应该在从 Flash Player 11.4/AIR 3.4 开始的非调试环境中工作。一定要试试。
    【解决方案2】:

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

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

    【讨论】:

    • 哇哦,闪亮!我将不得不自己尝试一下。很好的发现。 :)
    • 是的,这对我的 Flash Player 项目非常有用,但我在使用 AIR 时遇到了问题。我仅限于使用 AIR 3.1 命名空间的 Flex SDK 4.6。因此,我可以编译 AIR 的最高 swf 版本是 14,但我需要 18 才能让 getStackTrace() 不显示 null。因此,尽管我的应用程序在 AIR 3.9 运行时中运行,但它仍然返回 null :( 有没有办法针对比我的 SDK 更高的版本?
    • 天哪,这简直太荒谬了! alivelearn.net/?p=623 事实证明,即使在 AIR 运行时的发布版本上,我也可以轻松地在调试模式下运行我的 AIR 应用程序,而无需调试启动器和所有其他东西。只需将名为“调试”的空文件放入 ApplicationDirectory/META-INF/AIR 即可完成我需要的所有魔法。废话,为什么每次“空中调试”谷歌搜索都没有记录/弹出?本可以为我节省大量时间!如果您正在使用 AIR 应用程序,Atriace,这可能对您也有帮助,请查看 :)
    猜你喜欢
    • 1970-01-01
    • 2014-11-20
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多