我拼凑了一些来自这里和那里的代码以获得跟踪我喜欢...它会产生错误以获取堆栈跟踪并选择跟踪的例程名称,我喜欢跟踪日志中的详细信息。
问题:在已安装的AIR文件中失败。我想知道为什么?我不希望它做任何事情......只是,我更喜欢它不会导致程序失败!
TX 阿蒂
enter code here
static public function XTRACE( ... traceArgs ):void {
try {
throw new Error(); // make a stack
} catch (e:Error) {
var stack:String = e.getStackTrace();
var frames:Array = stack.split("\n");
var myFrame:String = String(frames[2]);
myFrame = myFrame.replace("\t", "");
// "at " can be followed by some part of the package
// you don't want to see. E.g., if your code is all in
// com.foo.bar, you can put "at com.foo.bar." so as not
// to crowd the display
myFrame = myFrame.substr("at ".length);
myFrame = myFrame.substring(0, myFrame.indexOf("["));
var now:Date = new Date();
trace(new Date().toLocaleTimeString() + ":" + myFrame + ": " + traceArgs.join(" "));
}
}
答案 0 :(得分:0)
您的应用以什么方式失败?
1)跟踪例程用于调试,因此您的跟踪不会在已安装的应用程序中执行任何操作。
2)我不确定你什么时候调用这个例程,但是你有一个只抛出错误的例程似乎很奇怪。我认为在这段代码中,只有在抛出错误时才会输入'catch'。通常情况下,您会尝试执行一些有用的操作,并在出现问题时捕获错误。
答案 1 :(得分:0)
在trace函数中,您尝试在 new 关键字实例化之前静态调用Date()。toLocaleTimeString()。请尝试以下方法:
trace((new Date()).toLocaleTimeString() + ":" + myFrame + ": " + traceArgs.join(" "));
答案 2 :(得分:0)
感谢您输入的Fergal。 XTRACE功能与调试播放器一起运行良好,并且仅在与发布播放器一起运行时才会失败。所以我假设我使用的代码行必须以正确的顺序关联值...我决定使用之前不知道的函数:
enter code here
static public function XTRACE( ... traceArgs ):void {
if ( Capabilities.isDebugger ) {
有了它,除非它在调试环境中执行,否则XTRACE什么都不做。所以它解决了这个问题。我仍然会使用你的括号,我也喜欢明确关联顺序; - )
答案 3 :(得分:0)
我意识到你可能已经老了,忘记了自从你提出这个问题后闪光灯是什么。但是,你得到一个NPE,因为e.getStackTrace()在发布播放器中返回null。
其他一些事情: