快速业务通道

追踪function的调用

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-14


追踪每个function 的调用,调用1个function 前输出1些调用的信息,对于调试很有帮助~~ 实现的方法就是为每个function 增加1个__name__属性,再为function制作1个作为外壳的function。外壳function负责输出调试信息,再调用原函数。稍作修改就可以将信息输出为调用栈的格式,更容易看~恩。。 但还有些不足之处,譬如当多个对象的方法指向同1个function时,就不能正确地输出结果了- -。。 使用方法: 添加后面的实现代码后:
_root.q=function(){ trace(5);}// testtraceMessages(_root);_root.q();//output:[call] q (called by undefined)5


traceMessages实现代码:

traceMessages = function (pObj) {
arguments.callee.init(pObj);
arguments.callee.execute(pObj);
arguments.callee.exit();
}
//
o = traceMessages;
//
o.init = function (pObj) {
this.arrFoundedObjects = new Array();
//
this.setFounded(pObj);
}
//
o.exit = function () {
delete this.arrFoundedObject;
}
//
o.execute = function (pObj) {
ASSetPropFlags(pObj, [’__proto__’, ’prototype’], 0, 1);
for (var p in pObj) {
//
var strType = typeof(pObj[p]);
var obj = pObj[p];
//
if (!this.isContainer(obj)) continue;
if (!pObj.hasOwnProperty(p)) continue;
if (p == ’__func__’) continue;
if (this.isFounded(obj)) continue;
if (p == ’traceMessages’) continue;
//
if (strType == ’object’ || strType == ’movieclip’) {
this.setFounded(obj);
arguments.callee.call(this, obj); // recursion
continue;
}
//
this.setFounded(obj);
arguments.callee.call(this, obj); // recursion
//
var tmp = obj;
pObj[p] = function () {
trace(’[call] ’ + arguments.callee.__name__ +
’ (called by ’ + arguments.caller.__name__ + ’)’);
return arguments.callee.__func__.apply(this, arguments);
}
pObj[p].__name__ = p;
pObj[p].__func__ = tmp;
pObj[p].__func__.__name__ = p;
}
ASSetPropFlags(pObj, [’__proto__’, ’prototype’], 1, 0);
}
//
o.setFounded = function (pObj) {
this.arrFoundedObjects.push(pObj);
}
//
o.isFounded = function (pObj) {
for (var p in this.arrFoundedObjects) {
if (this.arrFoundedObjects[p] == pObj) {
return true;
}
}
return false;
}
//
o.isContainer = function (pObj) {
var strType = typeof(pObj);
return (strType == ’object’ || strType == ’function’ || strType == ’movieclip’);
}
//
delete o; zz:
http://www.Flashfanatiker.de/blog/archives/000024.HTML
关键词:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号