我对flex/actionscript非常陌生,我想知道是否与php的文件和行标识符等效?
简单地说,我想做一些自定义错误日志记录,并希望这样做:
var mymessage:String = 'Oops, a hiccup occured at ' + __FILE__ + ', line: ' + __LINE__; 当然,在编译时文件和行将被替换为它们的值。
这个是可能的吗?
发布于 2010-04-27 17:18:38
这是不可能的,但对于个人测试,有一个相当有用的解决办法
var stackTrace:String = new Error().getStackTrace();
if (stackTrace) {
var mymessage:String = "Oops, a hiccup occurred " + stackTrace.split("\n")[1];
}调整你滥用getStackTrace的味道。
发布于 2010-07-02 17:34:02
以补充科里对上述问题的回答。第一句:
-define=CONFIG::debugging,true到库的编译器设置(“附加编译器参数”中的"-locale en_US“旁边)。然后使用这个快速库:
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 ) );
}
}
}
}然后你就可以打电话:
Stack.pstack();在任何函数中打印该点的堆栈位置,如下所示:
package::classname/function() at /wherever/src/package/classname.mxml:999只需记住在为生产编译之前将调试转换为false,剩下的就是一个空的p堆栈调用,它什么也不做--内核将有条件地编译出来。
发布于 2010-04-27 19:08:00
IMHO --行或文件--在Flex中没有添加多少信息。我通常输出类和方法名,而且由于我的方法往往很短,所以通常很清楚发生了什么事情。
如果您发现自己有数百行长的方法,那么您应该重新考虑您的编码风格。
https://stackoverflow.com/questions/2723286
复制相似问题