javascript - polar - Imprimir registro de funciones/seguimiento de pila para todo el programa utilizando Firebug
polar a 300 (4)
Cuando necesito un rastro de pila, hago lo siguiente, tal vez puedas sacar algo de inspiración de él:
function logStackTrace(levels) {
var callstack = [];
var isCallstackPopulated = false;
try {
i.dont.exist += 0; //doesn''t exist- that''s the point
} catch (e) {
if (e.stack) { //Firefox / chrome
var lines = e.stack.split(''/n'');
for (var i = 0, len = lines.length; i < len; i++) {
callstack.push(lines[i]);
}
//Remove call to logStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
else if (window.opera && e.message) { //Opera
var lines = e.message.split(''/n'');
for (var i = 0, len = lines.length; i < len; i++) {
if (lines[i].match(/^/s*[A-Za-z0-9/-_/$]+/(/)) {
var entry = lines[i];
//Append next line also since it has the file info
if (lines[i + 1]) {
entry += " at " + lines[i + 1];
i++;
}
callstack.push(entry);
}
}
//Remove call to logStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
}
if (!isCallstackPopulated) { //IE and Safari
var currentFunction = arguments.callee.caller;
while (currentFunction) {
var fn = currentFunction.toString();
var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf("(")) || "anonymous";
callstack.push(fname);
currentFunction = currentFunction.caller;
}
}
if (levels) {
console.log(callstack.slice(0, levels).join(''/n''));
}
else {
console.log(callstack.join(''/n''));
}
};
Nota del moderador : El código en esta respuesta parece también aparecer en esta publicación del blog de Eric Wenderlin . Sin embargo, el autor de esta respuesta lo reclama como su propio código, escrito antes de la publicación del blog vinculada aquí. Solo para propósitos de buena fe, agregué el enlace a la publicación y a esta nota.
Firebug tiene la capacidad de registrar llamadas a un nombre de función particular. Estoy buscando un error que a veces detiene el procesamiento de una página, pero no causa ningún error o advertencia. El error solo aparece la mitad del tiempo. Entonces, ¿cómo obtengo una lista de todas las llamadas a funciones para todo el programa, o algún tipo de seguimiento de pila para la ejecución de todo el programa?
Intente recorrer el código de una línea o una función a la vez para determinar dónde deja de funcionar correctamente. O haga algunas conjeturas razonables y disemine las instrucciones de registro a través de su código.
Lo logré sin firebug. Probado tanto en Chrome como en Firefox:
console.error("I''m debugging this code.");
Una vez que su programa imprima eso en la consola, puede hacer clic en la pequeña flecha para expandir la pila de llamadas.
Firefox proporciona console.trace()
que es muy útil para imprimir la pila de llamadas. También está disponible en Chrome e IE 11 .
Alternativamente, intente algo como esto:
function print_call_stack() {
var stack = new Error().stack;
console.log("PRINTING CALL STACK");
console.log( stack );
}