如何在非调试模式下获取Adobe AIR全局运行时错误的stacktrace?
新版本的AIR使我们能够全局捕获运行时错误并处理它们。问题是除了错误id、错误消息和名称之外,它没有stacktrace或任何关于错误的有用信息。例如,它可能会告诉我发生了一个空指针异常,但它不会告诉我发生在何处、哪个方法或任何事情。运行时的调试版本为我们提供了所有这些,但当应用程序部署到客户时,它不会在调试版本上运行,因此没有可用的有用信息。我想知道,对于如何更好地记录AIR应用程序中的错误以提高产品的可支持性,该小组是否有任何建议。有什么建议吗?在新版AIR支持之前,没有办法。由于性能问题,它现在不可用,使得全局处理程序几乎毫无用处。我也在等待,因为替代方案是自己记录所有内容,这非常耗时。编译器选项:如何在非调试模式下获取Adobe AIR全局运行时错误的stacktrace?,air,global,stack-trace,Air,Global,Stack Trace,新版本的AIR使我们能够全局捕获运行时错误并处理它们。问题是除了错误id、错误消息和名称之外,它没有stacktrace或任何关于错误的有用信息。例如,它可能会告诉我发生了一个空指针异常,但它不会告诉我发生在何处、哪个方法或任何事情。运行时的调试版本为我们提供了所有这些,但当应用程序部署到客户时,它不会在调试版本上运行,因此没有可用的有用信息。我想知道,对于如何更好地记录AIR应用程序中的错误以提高产品的可支持性,该小组是否有任何建议。有什么建议吗?在新版AIR支持之前,没有办法。由于性能问题,
compiler.verbose-stacktraces=true
即使是在非调试版本中也应该嵌入堆栈信息。我也有一些获取行号的技巧。:)
private function addedToStageHandler(event:Event):void {
loaderInfo.uncaughtErrorEvents.addEventListener( UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler );
}
错误。getStackTrace()
:
-compiler.verbose stacktraces=true
是否将此选项放在项目设置->Flex编译器->其他编译器参数中?如果是这样的话,您是在它前面加上破折号,比如so-compiler.verbose stacktraces=true还是不加破折号?我已经尝试了这一切可能的组合,但我仍然没有在我的发布版本中得到堆栈跟踪!杰森,我的情况也是一样,我无法在那种模式下追踪,我需要一些解决方案。我担心这不管用。你需要一个调试版本来完成这项工作,目前我还不知道还有其他方法。你是如何找到这个的,谢谢。难怪Adobe用Flash/Flex/AIR平台在a$$中大发雷霆。我担心它不起作用。我认为您使用的是调试构建,这就是它工作的原因。使用-debug=false时,即使使用这种方法,您仍然无法获得行号。
private function uncaughtErrorHandler( event:UncaughtErrorEvent ):void
{
var errorText:String;
var stack:String;
if( event.error is Error )
{
errorText = (event.error as Error).message;
stack = (event.error as Error).getStackTrace();
if(stack != null){
errorText += stack;
}
} else if( event.error is ErrorEvent )
{
errorText = (event.error as ErrorEvent).text;
} else
{
errorText = event.text;
}
event.preventDefault();
Alert.show( errorText + " " + event.error, "Error" );
}