在actionscript中使用flash player的正常版本(非调试版本)时,如何获取错误消息和堆栈跟踪?
我想在发布flash应用程序后记录其错误。在actionscript中使用flash player的正常版本(非调试版本)时,如何获取错误消息和堆栈跟踪?,flash,actionscript-3,actionscript,stack-trace,error-logging,Flash,Actionscript 3,Actionscript,Stack Trace,Error Logging,我想在发布flash应用程序后记录其错误。 我将在web服务器上的文件上保存日志。 当您使用flash player的正常版本(非调试版本)时,您知道如何获取错误消息和堆栈跟踪吗?客户端日志记录 如果要在浏览器中(而不是在Flash调试器中)访问调试工具,有许多选项 最简单的选择是下载并继续使用跟踪 我做了大量的跨浏览器检查,因此在我的Utils包中使用了一个自定义的log函数来访问JS控制台: log.as loggingEnabled.as 有很多地方可以改进,使用这个函数需要做一些事情。
我将在web服务器上的文件上保存日志。
当您使用flash player的正常版本(非调试版本)时,您知道如何获取错误消息和堆栈跟踪吗?客户端日志记录 如果要在浏览器中(而不是在Flash调试器中)访问调试工具,有许多选项 最简单的选择是下载并继续使用
跟踪
我做了大量的跨浏览器检查,因此在我的Utils包中使用了一个自定义的log
函数来访问JS控制台:
log.as
loggingEnabled.as
有很多地方可以改进,使用这个函数需要做一些事情。您需要定义CONFIG::DEBUG,此外,您还需要为事件的后台添加事件侦听器。激活和事件。停用以打开和关闭loggingEnabled
以防止flash崩溃。您还需要提供对flash视频的脚本访问
服务器端日志记录
如果您想使用Flash在服务器上记录消息,请使用Url加载器发送一个简单的Url请求,将消息作为参数传递给服务器端脚本。调用的日志脚本需要使用服务器端语言(如PHP或ASP.NET)编写
应注意对来自Flash的请求进行身份验证,以防止恶意访问(您不希望有人将一些可执行代码注入您的文件系统)。据我所知,无法从11.5版之前的Flash player发行版本获取堆栈跟踪。然而,2012年9月26日的Flash player beta 11.5版为该版本的播放器添加了一个基本的堆栈跟踪。使用它时,Error.getStackTrace会告诉您引发错误的类和函数,但不包括类路径或行
公告:
用法示例:
如果您想使用beta 11.5之前的调试Flash Player从发布版SWF(未使用debug=true构建)获取stacktraces,您可以使用“-compiler.verbose stacktraces”标志构建应用程序。如果您想在Web服务器上记录数据,您需要将数据传递到服务器,并通过服务器端脚本存储数据。Flash没有内置机制来执行此操作,因为它完全是在客户端运行的。@zzbov感谢您提供的信息!我不知道flash没有内置的机制来实现这一点。但我已经计划使用URLLoader将数据传递给服务器端脚本。我不知道的是,当您使用flash player的正常版本(非调试版本)时,如何获取错误消息和堆栈跟踪。您可以检查位于C:\Documents and Settings[用户名]\Application Data\Macromedia\flash player的flashlog.txt中的错误、警告和跟踪\Logs@Hardik谢谢但我在开发时已经检查了flashlog.txt。我想知道的是,当我的应用程序的用户使用该应用程序时,我如何检查这些信息。检查这些信息谢谢您的信息。但是我想记录我的应用程序的用户在网站上使用我的flash应用程序时的错误。即使在用户的控制台上显示错误,我也无法检查它们。
package com.zzzzbov.utils
{
import flash.external.ExternalInterface;
public function log(... args):void
{
CONFIG::DEBUG
{
trace(args);
if (loggingEnabled && ExternalInterface.available)
{
try
{
if (init === null)
{
init = ExternalInterface.call('eval', 'if(window.flashlog){false;}else{window.flashlog=function(){if(window.console&&console.log){if(console.log.apply){console.log.apply(console,arguments);}else{for(var i=0;i<arguments.length;i++){console.log(arguments[i]);}}}};true;}');
}
if (init)
{
var values:Array = new Array('flashlog');
ExternalInterface.call.apply(ExternalInterface, values.concat(args));
}
}
catch (e:Error)
{
//nothing really can be done
}
}
}
}
}
package com.zzzzbov.utils
{
internal var init:* = null;
}
package zfl.utils
{
internal var loggingEnabled:Boolean = true;
}