首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于__FILE__和__LINE__的Flex/actionscript 3等价物

用于__FILE__和__LINE__的Flex/actionscript 3等价物
EN

Stack Overflow用户
提问于 2010-04-27 17:01:35
回答 3查看 640关注 0票数 3

我对flex/actionscript非常陌生,我想知道是否与php的文件标识符等效?

简单地说,我想做一些自定义错误日志记录,并希望这样做:

代码语言:javascript
复制
 var mymessage:String = 'Oops, a hiccup occured at ' + __FILE__ + ', line: ' + __LINE__; 

当然,在编译时文件和行将被替换为它们的值。

这个是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-27 17:18:38

这是不可能的,但对于个人测试,有一个相当有用的解决办法

代码语言:javascript
复制
var stackTrace:String = new Error().getStackTrace();
if (stackTrace) {
    var mymessage:String = "Oops, a hiccup occurred " + stackTrace.split("\n")[1];
}

调整你滥用getStackTrace的味道。

票数 3
EN

Stack Overflow用户

发布于 2010-07-02 17:34:02

以补充科里对上述问题的回答。第一句:

代码语言:javascript
复制
-define=CONFIG::debugging,true

到库的编译器设置(“附加编译器参数”中的"-locale en_US“旁边)。然后使用这个快速库:

代码语言:javascript
复制
package ddd
{
  public class Stack
  {
    protected static function str(val:*):String
    {
      if( val == null      ) return "<null>";
      if( val == undefined ) return "<undefined>";
      return val.toString();
    }

    protected static var removeAt :RegExp = /^\s*at\s*/i;
    protected static var matchFile:RegExp = /[(][)][\[][^:]*?:[0-9]+[\]]\s*$/i;
    protected static var trimFile :RegExp = /[()\[\]\s]*/ig;

    /* Must maintain number of stack levels, so that _stack can assume the 4th line of getStackTrace */
    private static function _stack( msg:String="", ...params ):String
    {
      var s   :String = new Error().getStackTrace();
      var func:String = "??";
      var file:String = "??";
      var args:String = null;
      if(s)
      {
        func = s.split("\n")[4];
        func = func.replace( removeAt, "" );
        var farr:Array  = func.match( matchFile );
        if( farr != null && farr.length > 0 ) file = farr[0].replace( trimFile, "" );
        func = func.replace( matchFile, "" );
      }
      for each( var param:* in params )
      {
        args = ( args == null ? "" : args.concat(",") );
        args = args.concat( str(param) );
      }
      return func + "(" + (args==null?"":args) + ")" + ( (msg!=null && msg!="") ? ":"+msg : "" ) + " at " + file;
    }

    /* Must maintain number of stack levels, so that _stack can assume the 4th line of getStackTrace */
    public static function stack( msg:String="", ...params ):String
    {
      params.unshift( msg );
      return _stack.apply( null, params );
    }

    /* Must maintain number of stack levels, so that _stack can assume the 4th line of getStackTrace */
    public static function pstack( msg:String="", ...params ):void
    {
      CONFIG::debugging {
        params.unshift(msg);
        trace( _stack.apply( null, params ) );
      }
    }
  }
}

然后你就可以打电话:

代码语言:javascript
复制
Stack.pstack();

在任何函数中打印该点的堆栈位置,如下所示:

代码语言:javascript
复制
package::classname/function() at /wherever/src/package/classname.mxml:999

只需记住在为生产编译之前将调试转换为false,剩下的就是一个空的p堆栈调用,它什么也不做--内核将有条件地编译出来。

票数 1
EN

Stack Overflow用户

发布于 2010-04-27 19:08:00

IMHO --行或文件--在Flex中没有添加多少信息。我通常输出类和方法名,而且由于我的方法往往很短,所以通常很清楚发生了什么事情。

如果您发现自己有数百行长的方法,那么您应该重新考虑您的编码风格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2723286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档