Flash / ActionScript 3.0中的StackTrace

时间:2020-03-06 14:52:44  来源:igfitidea点击:

我想在代码的任何功能中看到堆栈跟踪,所以我做了这样的事情来调用它并打印堆栈跟踪:

public function PrintStackTrace() {
    try {
        throw new Error('StackTrace');
    } catch (e:Error) {
        trace(e.getStackTrace());
    }
}

我想知道是否还有其他方法可以做到这一点。在某个地方,Error类创建了堆栈跟踪,但是也许它不是用ActionScript 3.0来完成的,所以也许它不可能,但是我想知道。

谢谢!

解决方案

据我所知,使堆栈跟踪可用于我们自己的代码的唯一方法是通过Error类中的getStackTrace()方法,就像我们已经在做的那样。不过,在回答问题中的示例时,我要提到的是,我们实际上不必抛出Error,我们可以创建它并在其上调用方法:

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();

另外,如文档所述,此功能仅在Flash Player的调试版本中有效,因此我们可以将此功能包装在if块中,如果需要,可以检查Capabilities.isDebugger的值。

使用Flex SDK随附的Flex DeBugger(FDB)。这是一个命令行调试器,可让我们调试.swf,甚至在线调试(如果是调试版本)。它允许我们设置断点,打印/更改变量和转储堆栈,并且不需要我们添加任何额外的代码。一个不容错过的非常有用的工具!

我们将需要使用的fdb选项为'break'并指定要暂停执行的类和行,并使用'bt'或者'info stack'为我们提供堆栈的回溯信息。我们还可以在应用程序运行时显示几乎所有内容。