⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trace.js

📁 Sun的高速缓存CachedRowSet方案资料档
💻 JS
字号:
/////////////////////////////////////////////////
// RegisterNamespaces
// Adds the specified namespace without clobbering it if it already exists.
/////////////////////////////////////////////////
function RegisterNamespaces()
{
	for (var i=0;i<arguments.length;i++)
	{
		var astrParts = arguments[i].split(".")
		var root = window;
		for (var j=0; j < astrParts.length; j++)
		{
			if (!root[astrParts[j]]) 
			{
				root[astrParts[j]] = new Object(); 
			}
			root = root[astrParts[j]];
		}
	}
}



RegisterNamespaces("Web.Debug");

Web.Debug._Trace = function()
{
    var m_this = this;
    var m_cats = new Object();
    var m_components = new Object();
    var m_w;
    var m_elCtrl;
    var m_elCats;
    var m_elTrace;
    var m_bodyTrace;
    var m_onDoneCBs = new Array();
    var m_enterCount = 0;
    
    m_cats["*"] = true;
    
    this.htmPath = "/";
    
    var m_q = new Array();
    this.q = m_q;
    
    var m_componentCount = 0;
        
    this.registerForComplete = function(p_cb)
	{
	    m_onDoneCBs.push(p_cb);
	}
	
	this.unregisterForComplete = function(p_cb)
	{
		m_onDoneCBs.remove(p_cb);		
	}


        
    this.startComponent = function(p_name)
    {   
        m_componentCount++;
        m_components[p_name] = new _traceComponent(p_name);
        if (m_w)
            m_w.updateComponent(p_name);
    }
    
    this.componentDone = function(p_name)
    {
        m_componentCount--;
        m_components[p_name].end = new Date();
        
        if (m_w)
            m_w.updateComponent(p_name);
            
        
        
        if (m_componentCount == 0)
        {
            for (var i=m_onDoneCBs.length-1;i>=0;i--)
			{
				if (m_onDoneCBs[i])
					m_onDoneCBs[i]();
			}
        }
    }
    
    this.registerCategory = function(cat)
    {   
        if (m_cats[cat] == null)
        {   m_cats[cat] = false;
        }
        if (m_w)
            m_w.updateCats();
    }
    
    this.enableCategory = function(cat, enable)
    {
        if (m_cats[cat] != null)
        {   m_cats[cat] = enable;
        }        
        if (m_w)
            m_w.updateCats();
    }

    function isEnabled(cat)
    {
        return  ((m_cats[cat] == true) || 
                  ((m_cats[cat] != false) && (m_cats["*"] == true)));
    }
    
    var write = function(type, cat, str, fcn, guid)
    {
        m_q.push({type:type,
                     category:cat, 
                     text:str,
                     time:new Date(),
                     fcn:fcn,
                     guid:guid});
    }
    
    this.fcnEnter = function(cat, fcn)
    {
        if (isEnabled(cat))
        {
            // Generate a GUID of sorts
            var guid = m_enterCount;
            m_enterCount++;
            if (arguments.callee.caller)
            {
                var sdf = stackDumpFrame(arguments.callee.caller);
                var s = printStackDumpFrame(sdf);
            }
            else
            {   var s = "";
            }                
            
            var f = fcn ? fcn + " = " : "";

            write("FcnEnter", cat, "Enter: " + f + s, fcn, guid);
            
            return guid;
        }
    }

    this.fcnExit = function(cat, fcn, guid)
    {
        if (isEnabled(cat))
        {
            if (arguments.callee.caller)
            {
                var sdf = stackDumpFrame(arguments.callee.caller);
                var s = printStackDumpFrame(sdf);
            }
            else
            {   var s = "";
            }      
            var f = fcn ? fcn + " = " : "";
            write("FcnExit", cat, "Exit: " + f + s, fcn, guid);
        }
    }
    
    this.write = function(cat, str)
    {
        if (isEnabled(cat))
        {   
            write("Print", cat, str);
        }
    }
  
    
    this.categories = m_cats;
    this.components = m_components;
            
    this.open = function()
    {
        this.cancel();
		//m_w = window.open(this.htmPath + "trace.htm","MSN_DEBUG","location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no");
		m_w = window.open(this.htmPath + "trace.htm", "MSN_DEBUG");
		//m_w.document.open();
		m_w.focus();
		
	}
	
	this.openCB = function()
    {
        m_w.setup(m_this);
        m_w.updateCats(m_cats);
    }        
    
    this.init = function()
    {
    	document.attachEvent("onkeyup", display);
        window.attachEvent("onerror", globalErr);
    }
    
    var globalErr = function(a,b,c)
    {
    	var o = stackDump();
    	_trace.write("Exception", "<b>" + a + " " + b + " in " + c + "</b><br>" + o.toString());
    	displayPrompt();
    	return false;
    }

    // Create argument:argumentValue
    var expandArguments = function(s,a)
    {
    	var newargs = "";
    	var alist = s.split(",");
    	if (alist[0])
    		for (var arg=0;arg<alist.length;arg++)
    		{
    			if (arg>0) 
    			    newargs+=",";
    			
    			//  
    			// Hack so that if toString() fails, we don't.
    			// There is a case in LiveFramework where ToString will 
    			// cause an exception.  I've informed ScottI
    			//
    			var sarg = "";

    			var sarg = a[arg];
    			if (!sarg) 
    			{   sarg = "null";
    		    }
    			else
    			{   try
    			    {   sarg = sarg.toString();
    			    } catch (ex)
    			    {   sarg = "[error]";
    			    }
    			}
    			    
    			newargs += alist[arg] + ":" + sarg;
    		}
    	for (var i=arg;i<a.length;i++)
    		newargs+="," + a[i++];
    	return newargs;
    }


    var stackDumpFrame = function(frame)
    {
        var copyArgs = new Array()
		for (var i=0;i < frame.arguments.length;i++) 
		{
			copyArgs.push(frame.arguments[i])
		}
		
		return {f: frame,a: copyArgs};
    }
    
    var printStackDumpFrame = function(frame)
    {
        
        var f = frame.f.toString();
		var a = frame.a;
		var idxArgs = idxEnd = f.indexOf("(") + 1
		var idxClose = f.indexOf(")")
		var s = f.substring(0,idxArgs)
		var c = f.substring(idxClose)
		var newargs = expandArguments(f.substring(idxArgs,idxClose),a);
		
		var ret =  s + newargs + ")";
		return ret;
    }
    
    var stackDump = function() 
    {
    	var start = arguments.callee.caller.caller;
    	var callStack = new Array();
    	
    	while (start!=null)
    	{
    		callStack.push(stackDumpFrame(start));
    		start = start.caller;
    	}
    
    	this.toString = function() 
    	{
    		var cs = c = s = "";
    		for (var j=0; j < callStack.length; j++)
    		{
    			var obj = callStack[j];
    			cs += "<dd>" + printStackDumpFrame(obj) + "<br>";
    			
    		}
    		return cs;	
    	}
    	var pushString = this.toString();

    	return this;
    }

    // Open debug window using ctrl-shift-T
    var display = function()
    {
    	if (window.event.ctrlKey && window.event.shiftKey && window.event.keyCode==84) 
    	{   displayPrompt();
    	}
    }
    
    this.cancel = function()
    {
    	var elDebug = document.getElementById("MSN_DEBUG");
    	if (elDebug) elDebug.removeNode(true);
    }

    
    var displayPrompt = function()
    {
    	var elDebug = document.getElementById("MSN_DEBUG");
    	if (!elDebug)
    	{
    		try {
    		elDebug = document.createElement("DIV");
    		elDebug.id = "MSN_DEBUG";
    		elDebug.style.cssText = "width:200px;text-align:center;border:3px solid black;background:pink;position:absolute;top:2px;left:2px;z-index:100;font-family:verdana;font-size:8pt"
    		elDebug.innerHTML = "<A HREF=\"#\" ONCLICK=\"_trace.open();return false\">Display Trace Window</A> <BR> <A HREF=\"#\" ONCLICK=\"_trace.cancel();return false\">Cancel</A>";
    		document.body.appendChild(elDebug);
    		}
    		catch (ex)
    		{
    			alert("Error occurred - cannot trap");
    		}
    	}
    }    
        
    
    

    
    
}
function cb()
{   alert(2);
}
Web.Debug.Trace = new Web.Debug._Trace();

Web.Debug._Trace.Component = function(p_name)
{   this.name = p_name;
    this.start = new Date();
    this.end = null;
}

_trace = Web.Debug.Trace;
__p_trace = _trace;
__p_ = _trace;

_traceComponent = Web.Debug._Trace.Component;


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -