gpt4 book ai didi

apache-flex - 是否可以在不使用 Debug模式的情况下找到 ActionScript 3.0 中导致错误的函数和/或行号?

转载 作者:行者123 更新时间:2023-12-03 04:52:12 26 4
gpt4 key购买 nike

我目前正在尝试为 Flex 应用程序实现自动错误报告器,并且希望将错误消息以及导致错误的函数/行号返回到服务器。本质上,我试图在不进入 Debug模式的情况下获取 getStackTrace() 信息,因为应用程序的大多数用户不太可能拥有 Flash 播放器的调试版本。

我当前的方法是使用 UncaughtErrorEvent 处理程序来捕获应用程序内发生的错误,但错误消息仅返回已发生的错误类型,而不返回位置(这意味着它是无用的)。我尝试使用函数名称抓取器自己实现 getStackTrace() ,例如

            private function getFunctionName (callee:Function, parent:Object):String {
for each ( var m:XML in describeType(parent)..method) {
if ( this[m.@name] == callee) return m.@name;
}
return "private function!";
}

但这只会因为arguments.callee而起作用,因此不会经历多个级别的函数调用(它永远不会超出我的错误事件监听器)。

那么!任何人都对如何通过全局获取信息性错误消息有任何想法错误事件处理程序?

编辑:似乎存在一些误解。我明确避免使用 getStackTrace() 因为它在不处于 Debug模式时返回“null”。任何使用此函数的解决方案都是我特别试图避免的。

最佳答案

刚刚注意到有关“我不想使用调试”的部分。嗯,这不是一个选项,因为 Flash 的非调试版本根本没有任何堆栈跟踪的概念。很糟糕,不是吗?

<小时/>

不相关,但仍然很酷。

剩下的只是用于调试播放器。

这是我个人调试类的一部分(奇怪的是,它被添加到我从事的每个项目中)。它返回一个字符串,表示传递的堆栈中的索引——类和方法名称。一旦有了这些,行数就变得微不足道了。

    /**
* Returns the function name of whatever called this function (and whatever called that)...
*/
public static function getCaller( index:int = 0 ):String
{
try
{
throw new Error('pass');
}
catch (e:Error)
{
var arr:Array = String(e.getStackTrace()).split("\t");
var value:String = arr[3 + index];
// This pattern matches a standard function.
var re:RegExp = /^at (.*?)\/(.*?)\(\)/ ;
var owner:Array = re.exec(value);
try
{
var cref:Array = owner[1].split('::');
return cref[ 1 ] + "." + owner[2];
}
catch( e:Error )
{
try
{
re = /^at (.*?)\(\)/; // constructor.
owner = re.exec(value);
var tmp:Array = owner[1].split('::');
var cName:String = tmp.join('.');
return cName;
}
catch( error:Error )
{
}
}
}
return "No caller could be found.";
}

作为旁注:这没有正确设置来处理事件模型 - 有时事件将自己呈现为没有调用者或一些非常奇怪的替代语法。

关于apache-flex - 是否可以在不使用 Debug模式的情况下找到 ActionScript 3.0 中导致错误的函数和/或行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com