Obtendo rastreamentos de pilha JavaScript para exceções personalizadas
Ao executar seu código JavaScript, as exceções podem fornecer informações valiosas sobre os problemas encontrados pelo seu script. No entanto, obter rastreamentos de pilha para exceções lançadas por você mesmo representa um desafio. Este artigo aborda esse problema e fornece soluções para obter rastreamentos de pilha especificamente para suas próprias exceções.
Inicialmente, só era possível obter rastreamentos de pilha para exceções JavaScript integradas. No entanto, os avanços nos navegadores modernos introduziram novas técnicas para resolver essa limitação.
Console.trace() para navegadores modernos
Em navegadores recentes, o console.trace( ) está disponível. Ao chamá-lo, você pode obter um rastreamento de pilha que inclui o local da invocação console.trace().
console.trace();
Error Stack Property para todos os navegadores
Uma solução refinada compartilhada pelos comentaristas da pergunta original envolve a utilização da propriedade stack de um objeto Error.
function stackTrace() {
var err = new Error();
return err.stack;
}
Essa abordagem fornece um rastreamento de pilha detalhado semelhante à saída gerada por console.trace():
DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44 DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9 .success@http://localhost:49573/:462 x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4 x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4 k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6 .send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
Função de rastreamento de pilha personalizada
Em navegadores mais antigos que não suportam esses métodos, uma função mais complexa pode ser usada para obter um rastreamento de pilha personalizado:
function stacktrace() {
function st2(f) {
return !f ? [] :
st2(f.caller).concat([f.toString().split('(')[0].substring(9) '(' f.arguments.join(',') ')']);
}
return st2(arguments.callee.caller);
}
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3