我希望看到我的代码的任何功能的堆栈跟踪,所以我做了财产以后这样调用它并打印堆栈跟踪:
public function PrintStackTrace() {
try {
throw new Error('StackTrace');
} catch (e:Error) {
trace(e.getStackTrace());
}
}
我想知道是否有其他的方式来做到这一点。 在一些地方,错误类创建堆栈跟踪,但也许并没有那么也许它不是更多钞票使用ActionScript 3.0做到这一点,但我想知道。
谢谢!
据我所知,以提供给您自己的代码的堆栈跟踪的唯一方法是通过的getStackTrace() Error类中的方法,就像你已经做。 在回答你的问题的例子,不过,我会提到,你实际上没有抛出的错误 - 你可以创建它,并调用它的方法:
var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();
此外,像文档中说,这仅适用于Flash Player的调试版本,所以你可以在一个if块,检查的价值包装这个功能Capabilities.isDebugger如果你想。
从Flash Player的11.5堆栈跟踪也是球员的非调试版本可用。
使用Flex调试器(FDB)随附的Flex SDK。 这是一个命令行调试器,使您可以在线调试.swf文件,甚至是那些(如果它是一个调试版本)。 它可以让你设置断点,打印/变化的变量,并转储堆栈,并且不需要你添加任何额外的代码 。 一个非常有用的工具,你不应该没有!
你需要FDB的选项是“休息”,并指定类和你想要执行停止线,和“BT”或“信息栈”给你堆栈的回溯。 在它运行时也可以显示有关应用程序的几乎一切。
@hasseg是正确的。 您还可以通过编译SWF时提供-compiler.verbose-踪迹= TRUE保存在发布版本(不调试)堆栈跟踪信息。
我已经把这个小功能:
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()函数线)通过添加另一个移()调用,但我离开它作为“栈的起点跟踪”。
var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();
写这个stackTrace
字符串转换成任何文件,以便您可以在运行模式也看到你的程序的日志。 所以,你不必只在调试模式下运行它。 把它写成uncaughtexception
应用程序的事件,所以它会最后执行。
为Flash 11.5,堆栈跟踪在Flash的发行版本。
然而,这并不意味着这不再是一个问题。 如果您的应用程序设置中使用编译年龄超过11.5 Flash Builder --> Project properties --> ActionScript Compiler
,你不会有堆栈跟踪。
此外,在同一页面上,你可以看到你的AIR SDK版本。 如果您使用V3.4或以上,你不会看到堆栈跟踪。 如果这是你的问题,所有的开发人员应该按照说明更新他们的AIR SDK 这里 。
该getStackTrace
方法返回仅在调试flash播放器(堆栈跟踪https://www.adobe.com/support/flashplayer/debug_downloads.html )上发布的球员将返回null
。 请确保您有安装并运行调试播放器。
该-compiler.verbose-stacktraces=true
只添加行号到调试堆栈跟踪。
抽样检测: https://gist.github.com/pipeno/03310d3d3cae61460ac6c590c4f355ed