堆栈跟踪在Flash / ActionScript 3.0中(StackTrace in Flash

2019-07-20 00:32发布

我希望看到我的代码的任何功能的堆栈跟踪,所以我做了财产以后这样调用它并打印堆栈跟踪:

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

我想知道是否有其他的方式来做到这一点。 在一些地方,错误类创建堆栈跟踪,但也许并没有那么也许它不是更多钞票使用ActionScript 3.0做到这一点,但我想知道。

谢谢!

Answer 1:

据我所知,以提供给您自己的代码的堆栈跟踪的唯一方法是通过的getStackTrace() Error类中的方法,就像你已经做。 在回答你的问题的例子,不过,我会提到,你实际上没有抛出的错误 - 你可以创建它,并调用它的方法:

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

此外,像文档中说,这仅适用于Flash Player的调试版本,所以你可以在一个if块,检查的价值包装这个功能Capabilities.isDebugger如果你想。



Answer 2:

从Flash Player的11.5堆栈跟踪也是球员的非调试版本可用。



Answer 3:

使用Flex调试器(FDB)随附的Flex SDK。 这是一个命令行调试器,使您可以在线调试.swf文件,甚至是那些(如果它是一个调试版本)。 它可以让你设置断点,打印/变化的变量,并转储堆栈,并且不需要你添加任何额外的代码 。 一个非常有用的工具,你不应该没有!

你需要FDB的选项是“休息”,并指定类和你想要执行停止线,和“BT”或“信息栈”给你堆栈的回溯。 在它运行时也可以显示有关应用程序的几乎一切。



Answer 4:

@hasseg是正确的。 您还可以通过编译SWF时提供-compiler.verbose-踪迹= TRUE保存在发布版本(不调试)堆栈跟踪信息。



Answer 5:

我已经把这个小功能:

public static function getStackTrace() : String
{
    var aStackTrace : Array = new Error().getStackTrace().split("\n");
    aStackTrace.shift();
    aStackTrace.shift();
    return "Stack trace: \n" + aStackTrace.join("\n");
}

我有一个自定义的“调试” I类开发时与我的应用程序使用此功能。 这两个转变()调用删除第一个两行:第一个就是字符串“Error”,第二行是指这个功能本身,所以它是没有用的。 你甚至可以删除第三行,如果你希望(它指的是你将在调用的getStackTrace()函数线)通过添加另一个移()调用,但我离开它作为“栈的起点跟踪”。



Answer 6:

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

写这个stackTrace字符串转换成任何文件,以便您可以在运行模式也看到你的程序的日志。 所以,你不必只在调试模式下运行它。 把它写成uncaughtexception应用程序的事件,所以它会最后执行。



Answer 7:

为Flash 11.5,堆栈跟踪在Flash的发行版本。

然而,这并不意味着这不再是一个问题。 如果您的应用程序设置中使用编译年龄超过11.5 Flash Builder --> Project properties --> ActionScript Compiler ,你不会有堆栈跟踪。

此外,在同一页面上,你可以看到你的AIR SDK版本。 如果您使用V3.4或以上,你不会看到堆栈跟踪。 如果这是你的问题,所有的开发人员应该按照说明更新他们的AIR SDK 这里 。



Answer 8:

getStackTrace方法返回仅在调试flash播放器(堆栈跟踪https://www.adobe.com/support/flashplayer/debug_downloads.html )上发布的球员将返回null 。 请确保您有安装并运行调试播放器。

-compiler.verbose-stacktraces=true只添加行号到调试堆栈跟踪。

抽样检测: https://gist.github.com/pipeno/03310d3d3cae61460ac6c590c4f355ed



文章来源: StackTrace in Flash / ActionScript 3.0