Os erros em JavaScript podem frequentemente ser crÃpticos e fatais. Combinado com retornos de chamada, assÃncrono e funções comuns, encontrar a causa raiz pode ser um inferno.
Melhor tratamento de erros pode ser alcançado usando a chamada .stack em um erro dentro do bloco catch de uma função. Todos os erros podem ser capturados criando uma função chamada window.onerror .
Por exemplo:
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>
O código é executado no carregamento e foi projetado propositadamente para falhar. Isso falhará em dois lugares ao chamar o método .doesnt_exist , que é um método sem definição. Um dentro do bloco try … catch , que preencherá a primeira mensagem de erro, e outro sem, que será capturado pelo 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
A saÃda mostrará o número da linha e as chamadas de função para cada método.