Seguimiento de pila para JavaScript

Los errores en JavaScript a menudo pueden ser crípticos y fatales. Combinado con devoluciones de llamada, asincronicidad y funciones comunes, encontrar la causa raíz puede ser un infierno.

Se puede lograr un mejor manejo de errores usando la llamada .stack en un error dentro del bloque catch de una función. Todos los errores se pueden capturar creando una función llamada window.onerror .

Por ejemplo:

body onload="func()">
<div id="error"></div>
<div id="error2"></div>
</body>

<script type="text/javascript">

function func()
{
try
{
var abc;
console
.log(abc.doesnt_exist)
}
catch (error)
{
document
.getElementById('error').innerText = error.stack;
}

abc
.doesnt_exist
}

window
.onerror = function(message, url, linenumber)
{
document
.getElementById('error2').innerText = "JavaScript error: " + message + " on line " + linenumber + " for " + url;
}

</script>

El c√≥digo se ejecuta en carga y est√° dise√Īado a prop√≥sito para fallar. Esto fallar√° en dos lugares al llamar al m√©todo .doesnt_exist , que es un m√©todo sin definici√≥n. Uno dentro del bloque try … catch , que llenar√° el primer mensaje de error, y uno fuera, que ser√° capturado por window.onerror .

TypeError: Cannot read property 'doesnt_exist' of undefined
at func
(file:///Z:/Teddy/websites/Echovoice%20Sandbox/javascript%20stack%20trace/stack.html:22:18)
at onload
(file:///Z:/Teddy/websites/Echovoice%20Sandbox/javascript%20stack%20trace/stack.html:7:108)
JavaScript error: Uncaught TypeError: Cannot read property 'doesnt_exist' of undefined on line 29 for file:///Z:/Teddy/websites/Echovoice%20Sandbox/javascript%20stack%20trace/stack.html

La salida mostrar√° el n√ļmero de l√≠nea y las llamadas a funciones para cada m√©todo.