Flash/ActionScript 3.0中的StackTrace

Luc*_*hez 37 flash stack-trace actionscript-3

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

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

我想知道是否有其他方法可以做到这一点.在某些地方,Error类创建堆栈跟踪,但也许它没有使用ActionScript 3.0,所以也许它不可行,但我想知道.

谢谢!

has*_*seg 51

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

var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();
Run Code Online (Sandbox Code Playgroud)

此外,与文档说的一样,这仅适用于Flash Player的调试版本,因此您可以将此功能包装在if-block中,以便在需要时检查Capabilities.isDebugger的值.

  • 只需编写:`var stackTrace:String =(new Error()).getStackTrace();`甚至`trace("stack trace:"+(new Error()).getStackTrace()); `. (5认同)

小智 8

从Flash Player 11.5开始,堆栈跟踪也可以在非调试器版本的播放器中使用.


Joo*_*ony 6

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

你需要的fdb选项是'break'并指定你想要执行停止的类和行,'bt'或'info stack'给你一个堆栈的回溯.您还可以在运行时显示有关应用程序的几乎所有内容.