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?Imprimir registro de función/pila para todo el programa utilizando firebug
Respuesta
Firefox providesconsole.trace()
que es muy útil para imprimir la pila de llamadas. También está disponible en Chrome y IE 11.
tratar Alternativamente algo como esto:
function print_call_stack() {
var stack = new Error().stack;
console.log("PRINTING CALL STACK");
console.log(stack);
}
Intente recorrer su código 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.
Esto. Definitivamente agregue una carga de instrucciones 'console.log ('something')' a sus funciones para ver cuáles se llaman (y no) – Gareth
El programa es enorme, entonces estoy buscando una forma de comparar registros de funciones para cuando el programa se ejecutó correctamente vs cuando no lo hizo. – amccormack
Estoy de acuerdo en que esto sería útil. Estoy interviniendo para tomar posesión de una gran base de código y algo que puede generar un seguimiento de todas las llamadas de función sin duda ayudaría a obtener una idea del flujo/forma del código y detectar el código muerto. –
cuando necesito un seguimiento de pila hago lo siguiente, tal vez usted puede sacar algo de inspiración de ella:
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'));
}
};
del moderador nota: El código de esta respuesta parece a aparecer también en this post from Eric Wenderlin's blog. 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.
Hay una llamada a console.trace() que puede hacer en Firebug que hace esto. – amccormack
Esto es brillante. Firebug tiene problemas con los archivos minificados, ¡este script lo hace! – pstadler
FWIW @ andrew-barber, autor de la respuesta nunca reclamada como suya. Simplemente no lo atribuí. Tu edición debe ser un comentario. – Ascherer
he logrado esto sin incendiario. Probado tanto en Chrome y Firefox:
console.error("I'm debugging this code.");
Una vez impreso el programa que a la consola, puede hacer clic en la flecha pequeña para que se expanda la pila de llamadas.
- 1. Imprimir en el registro utilizando Go Language Simple HTTP Server
- 2. ¿Qué significa el mensaje de error Firebug "XML no puede ser todo el programa"?
- 3. Guardar o Imprimir Salida de Firebug
- 4. Highcharts: botón "Imprimir todo"
- 5. utilizando JavaScript para imprimir imágenes
- 6. ¿Cómo imprimir todo el conjunto de NumPy?
- 7. Imprimir tabla de partición - Programa C
- 8. ¿Cómo imprimir todo el tipo base de un objeto?
- 9. Imprimir todo lo que puede ser importado
- 10. Eliminar todo el contenido utilizando JS puro
- 11. Firebug como herramienta para WPF?
- 12. cómo imprimir todo el elemento HTML en JavaScript?
- 13. ¿Cómo imprimir el uso del programa en Perl?
- 14. hay una manera de imprimir el archivo de configuración para aumentar las opciones del programa
- 15. Imprimir NSString Argumento utilizando NSLog
- 16. ¿Cómo imprimir valores de registro en GDB?
- 17. Imprimir todo el contenido div con jquery printElement
- 18. Imprimir flujo de código fuente cuando se ejecuta el programa
- 19. Imprimir campos de registro en PL/SQL
- 20. Cómo imprimir un mensaje personalizado en el código para el registro de compilación de Teamcity C#
- 21. ¿Hay alguna forma en Grails de obtener todo el registro?
- 22. Registro y filtrado utilizando log4cxx
- 23. Ensamblaje: utilizando el Registro de segmento de datos (DS)
- 24. borrar todo el registro de la tabla en mysql
- 25. ¿Cómo puedo imprimir el contenido de la pila en el programa C?
- 26. ¿Es posible probar/capturar todo el programa C#?
- 27. Garantías en Imprimir el registro por delante aplicación
- 28. Desactivar todo en Windows excepto el programa C#
- 29. Firebug como complemento para el navegador Safari
- 30. Almacenando el registro en el archivo .log utilizando SLF4j/log4j
+1 console.trace() – chim
esto es genial :) – iamawebgeek
¿Hay alguna manera de aumentar la longitud de la pila? Eso sería muy util. –