Adobe Air,打包安装失败了我的跟踪程序......怎么回事?

时间:2010-03-31 15:59:54

标签: actionscript-3 air adobe trace package

我拼凑了一些来自这里和那里的代码以获得跟踪我喜欢...它会产生错误以获取堆栈跟踪并选择跟踪的例程名称,我喜欢跟踪日志中的详细信息。

问题:在已安装的AIR文件中失败。我想知道为什么?我不希望它做任何事情......只是,我更喜欢它不会导致程序失败!

TX 阿蒂

enter code here    

static public function XTRACE( ... traceArgs ):void {
    try {
        throw new Error();  // make a stack
    } catch (e:Error) {
        var stack:String = e.getStackTrace();
        var frames:Array = stack.split("\n");
        var myFrame:String = String(frames[2]);
        myFrame = myFrame.replace("\t", "");

        // "at " can be followed by some part of the package
        // you don't want to see. E.g., if your code is all in
        // com.foo.bar, you can put "at com.foo.bar." so as not
        // to crowd the display
        myFrame = myFrame.substr("at ".length);
        myFrame = myFrame.substring(0, myFrame.indexOf("["));
        var now:Date = new Date();
        trace(new Date().toLocaleTimeString() + ":" + myFrame + ": " + traceArgs.join(" "));
    }
}

4 个答案:

答案 0 :(得分:0)

您的应用以什么方式失败?

1)跟踪例程用于调试,因此您的跟踪不会在已安装的应用程序中执行任何操作。

2)我不确定你什么时候调用这个例程,但是你有一个只抛出错误的例程似乎很奇怪。我认为在这段代码中,只有在抛出错误时才会输入'catch'。通常情况下,您会尝试执行一些有用的操作,并在出现问题时捕获错误。

答案 1 :(得分:0)

在trace函数中,您尝试在 new 关键字实例化之前静态调用Date()。toLocaleTimeString()。请尝试以下方法:

trace((new Date()).toLocaleTimeString() + ":" + myFrame + ": " + traceArgs.join(" "));

答案 2 :(得分:0)

感谢您输入的Fergal。 XTRACE功能与调试播放器一起运行良好,并且仅在与发布播放器一起运行时才会失败。所以我假设我使用的代码行必须以正确的顺序关联值...我决定使用之前不知道的函数:

enter code here
static public function XTRACE( ... traceArgs ):void {
    if ( Capabilities.isDebugger ) {     

有了它,除非它在调试环境中执行,否则XTRACE什么都不做。所以它解决了这个问题。我仍然会使用你的括号,我也喜欢明确关联顺序; - )

答案 3 :(得分:0)

我意识到你可能已经老了,忘记了自从你提出这个问题后闪光灯是什么。但是,你得到一个NPE,因为e.getStackTrace()在发布播放器中返回null。

其他一些事情:

  1. 您不需要抛出错误来获取堆栈跟踪; new Error()。getStackTrace()工作正常。
  2. 由于这是调试代码,并且调用代码可能不会出现错误,因此您应该将整个内容包装在try catch中。
  3. 编译器不会解析'at'.length,因此每次运行时都会调用它。除非你真的很偏执,否则你可以硬编码为3。
  4. 两个替代品可以组合成1个
  5. 不使用now变量。