我能否构建 Adobe AIR 应用的调试版本?

4
我正在尝试调试客户机上的问题。问题是运行时错误,几乎没有线索。这是一个间歇性的问题。我知道ADL允许我以调试模式运行应用程序。但是,要告诉用户下载和管理ADL调用将非常困难。如果我只能给最终用户一个安装/可执行文件来安装和运行,然后发送给我问题的跟踪信息,那就容易得多了。因此,我正在寻找简单的步骤,让客户能够以调试模式运行AIR应用程序。远程管理最终用户下载ADL并找到应用程序的安装位置将会很困难。
更新: 您必须确保使用AIR 3.5和Flash 11.5,并在附加编译器设置中包含以下标志“-swf-version=18”。然后,按照答案中提到的方法捕获全局错误,它将显示错误的位置。当然没有行号,只有例行程序名称。感谢Lee提供的精彩答案。
3个回答

6

虽然不是直接的答案,但如果您发布的是AIR3.5(或3.6 beta),则可以获得一些调试信息:

在应用程序顶层添加未捕获运行时错误监听器:

this.loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, globalErrorHandler);

并从监听器的错误中获取调试信息:

function globalErrorHandler(event:UncaughtErrorEvent):void
{
    var message:String;
    //check for runtime error
    if (event.error is Error)
        message = (event.error as Error).getStackTrace();
    //handle other errors
    else if (event.error is ErrorEvent)
        message = (event.error as ErrorEvent).text;
    else
        message = event.error.toString();
    //do something with message (eg display it in textfield)
    myTextfield.text = message;
}

如果你使用AIR3.5或更高版本,getStackTrace方法将即使针对发布版的AIR应用程序也返回堆栈跟踪。


5
在 Flash Player 11.4 及更早版本以及 AIR 3.4 及更早版本中,只有在 Flash Player 的调试器版本或 AIR 调试启动器(ADL)中运行代码时才能获得堆栈跟踪。在这些运行时的非调试器版本中,调用此方法会返回 null。 - user1901867
你是说我需要在Flash Builder中升级我的SDK到AIR 3.5和Flash Player 11.5,然后发布它。这将强制用户在他们的机器上获取AIR 3.5来运行它,然后我就可以得到跟踪信息了。对吗? - Saviz
getStackTrace自AIR 1.0起就可用,因此您可以使用任何SDK进行发布,但用户需要AIR 3.5才能在调试之外正常工作。因此,实际上是的;您需要使用3.5 SDK - 只是为了强制用户使用3.5。 - user1901867
所以我在我的机器上安装了最新的AIR 3.5。我没有改变构建应用程序的方式,只是在其上方添加了全局错误和堆栈跟踪代码。我还故意引发了运行时错误以查看其行为。但它没有起作用。也就是说,堆栈跟踪为空。什么也没有显示出来。 - Saviz
1
好的,我搞定了 - 我在附加编译器设置中加入了“-swf-version=18”,现在它可以工作了。不确定为什么需要这样做;在应用程序描述文件中将命名空间设置为AIR3.5应该足以强制编译到3.5,但我猜它并不是这样。 - user1901867
显示剩余6条评论

1

如果没有SDK工具,我认为不可能以调试模式运行aIR应用程序。但是,这里有几个替代方案可以考虑:

  • 客户必须对导致错误的情况有一些了解,对吧?你能否提供一个带有警报框或日志记录等特殊构建版本,以帮助将错误隔离到代码行?
  • 你能监听uncaughtException事件吗?该事件将提供完整的堆栈跟踪(Error.getStackTrace());然后您可以记录它--可能与其他信息一起。然后您只需告诉客户“去这里”并“发送给我此文件”。甚至可以在某个警报中显示信息,并要求用户将其复制并粘贴到电子邮件中发送给您。有关未捕获异常的更多信息,请单击此处此处

1
该死!我总是被抢先一步 ;) - user1901867

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接