【问题标题】:getting the stack trace of a flash application when running without the debugger在没有调试器的情况下运行闪存应用程序的堆栈跟踪
【发布时间】:2013-04-09 17:15:52
【问题描述】:

我正在尝试为我的应用程序创建崩溃报告。当游戏使用调试运行时,获取堆栈跟踪很容易:它包含在崩溃中创建的错误对象中。但是在没有调试的情况下运行时,会丢失此信息。

有什么方法可以得到这些信息吗?

【问题讨论】:

  • 文档说:“对于 Flash Player 11.4 及更早版本和 AIR 3.4 及更早版本,堆栈跟踪在代码在 Flash Player 的调试器版本或AIR Debug Launcher (ADL)。在这些运行时的非调试器版本中,调用此方法将返回 null。”也许尝试针对更新版本的 Flash Player 或 AIR 看看是否可行?
  • 参见stackoverflow.com/questions/13999626/… - 问题涉及 AIR,但也适用于 FlashPlayer
  • 简答:不工作。我已经尝试了一段时间,并且只在调试模式下工作。您也可以手动指定发生这种情况的类/行,但这太难看且不专业(任何代码更改都需要更新),所以我不推荐它。

标签: actionscript-3 flash stack-trace


【解决方案1】:

您可以在应用的可疑位置使用 try-catch 块。

try {
    ExternalInterface.call('conf', 4);
    ExternalInterface.addCallback('transcodeReqAnswer', analyseTranscodeAnswer);
} catch(er:Error) {
    debugTextField.text = er.getStackTrace();
}

【讨论】:

  • 这只能在调试模式下正常工作,在发布版本中你只会得到错误名称
  • try...catch 在处理器上也很重。您应该避免在发布版本中使用它。
【解决方案2】:

如果您在调试模式下编译,则必须通过 ExternalInterface 将参数传递给 javascript。然后您应该能够从浏览器的控制台输出中看到堆栈跟踪。

例子:

flash.system.Security.allowDomain(sourceDomain)
ExternalInterface.call("print", error.getStackTrace());

在 JavaScript 中应该有一个函数

function takeLog(string) {
    console.log("stacktrace: " + string);
}

在非调试模式下,getStackTrace() 函数返回 null。

更多信息在官方文档中, ExternalInterface.call(), getStackTrace()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2013-12-31
    • 2013-08-03
    相关资源
    最近更新 更多