我想在我的代码的任何函数中看到堆栈跟踪,所以我做了这样的事情来调用它并打印堆栈跟踪:
public function PrintStackTrace() {
try {
throw new Error('StackTrace');
} catch (e:Error) {
trace(e.getStackTrace());
}
}
我想知道是否有其他办法可以做到这一点。在某些地方,Error类创建堆栈跟踪,但也许它没有使用ActionScript 3.0,所以也许它不可行,但我想知道。
谢谢!
答案 0 :(得分:50)
据我所知,将堆栈跟踪提供给您自己的代码的唯一方法是通过Error类中的getStackTrace()方法,就像您已经在做的那样。但是,为了回答你的问题中的例子,我要提到你实际上不必抛出错误 - 你可以创建它并在其上调用方法:
var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();
此外,与文档说的一样,这仅适用于Flash Player的调试版本,因此您可以将此功能包装在if块中,以便根据需要检查Capabilities.isDebugger的值。
答案 1 :(得分:8)
从Flash Player 11.5开始,堆栈跟踪也可以在非调试器版本的播放器中使用。
答案 2 :(得分:6)
使用Flex SDK附带的Flex DeBugger(FDB)。它是一个命令行调试器,允许您调试.swf,甚至是在线调试(如果它是调试版本)。它允许您设置断点,打印/更改变量和转储堆栈,不需要您添加任何额外的代码。一个非常有用的工具,你不应该没有!
你需要的fdb选项是'break'并指定你想要执行停止的类和行,'bt'或'info stack'给你一个堆栈的回溯。您还可以在运行时显示应用程序的几乎所有内容。
答案 3 :(得分:2)
@hasseg是对的。您还可以通过在编译SWF时提供-compiler.verbose-stacktraces = true来保留发布版本(而非调试)中的堆栈跟踪信息。
答案 4 :(得分:2)
我把这个小功能放在一起:
var obj = { Not: 1, long: 1, left: 2, grab: 1, an: 4, Easter: 5, bargain: 1 },
array = Object.keys(obj).map(function (k) { return { word: k, num: obj[k] }; });
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
// edit sorting
array.sort(function (a, b) { return a.num - b.num; });
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
我在开发时使用我的应用程序的自定义“Debug”类中有此功能。两个shift()调用删除前两行:第一行只是字符串“Error”,第二行引用此函数本身,所以它没用。如果你愿意,你甚至可以删除第三行(它指向你调用getStackTrace()函数的行)通过添加另一个shift()调用,但我把它作为“栈的起点”迹”。
答案 5 :(得分:1)
var tempError:Error = new Error();
var stackTrace:String = tempError.getStackTrace();
将此stackTrace
字符串写入任何文件,以便您也可以在运行模式下查看程序的日志。因此,您无需仅在调试器模式下运行它。将其写入应用程序的uncaughtexception
事件,因此它将最后执行。
答案 6 :(得分:1)
从Flash 11.5开始,堆栈跟踪在Flash的发行版中起作用。
然而,这并不意味着这不再是一个问题。如果您的应用程序设置为在Flash Builder --> Project properties --> ActionScript Compiler
中使用早于11.5的编译器,则不会有堆栈跟踪。
此外,在同一页面上,您可以看到AIR SDK版本。如果您使用的是v3.4或更早版本,则不会看到堆栈跟踪。如果这是您的问题,则所有开发人员都应按照here的说明更新其AIR SDK。
答案 7 :(得分:0)
INSERT INTO `wp_usermeta`(`user_id`, `meta_key`, `meta_value`) VALUES (ID148 , 'somekey','somevalue'), (ID156 , 'somekey','somevalue'),
方法仅在调试Flash播放器(https://www.adobe.com/support/flashplayer/debug_downloads.html)上返回堆栈跟踪,在发布播放器上返回getStackTrace
。确保已安装并运行调试播放器。
null
仅将行号添加到调试堆栈跟踪中。
样品测试: https://gist.github.com/pipeno/03310d3d3cae61460ac6c590c4f355ed