Rastreamento de pilha de exceção de Javascript

89

No Firefox, posso obter o rastreamento de pilha de uma exceção usando exception.stack.

Existe uma maneira de fazer isso em outros navegadores também?

Edit: Na verdade, eu quero salvar o rastreamento de pilha automaticamente (se possível) e não depurá-lo no momento (ou seja, eu sei como obter o rastreamento de pilha em um depurador).

ujh
fonte

Respostas:

73

Coloque esta linha onde deseja imprimir o rastreamento de pilha:

console.log(new Error().stack);

Nota: testado por mim no Chrome 24 e Firefox 18

Também pode valer a pena dar uma olhada nesta ferramenta .

Francesco Casula
fonte
2
Legal - eu uso uma combinação de onerror para obter o número da linha e, em seguida, envolvo a linha ofensiva com um try catch e sua sugestão para alertar o stacktrace de volta ao usuário. `window.onerror = function (message, url, lineNumber) {alert ('message:' + message + '- url:' + url + '- ln:' + lineNumber); return true; }; `Em seguida, embrulhe-o para imprimir o rastreamento de pilha. `try {// Algum código que está causando a exceção. } catch (e) {alert (new Error (). stack); } `
Philip Murphy
de alguma forma, morre apenas me dá a primeira linha da pilha. O que estou fazendo de errado?? ou seja: função foo () {fdasmkl} try {foo ()} catch (e) {err = new Error (e) .stack; console.log (err)} = >>> em Error: ReferenceError: fdasmkl is not defined at <anonymous>:6:7vez de"Error: ReferenceError: fdasmkl is not defined at eval (eval at <anonymous> (:6:1), <anonymous>:1:1) at <anonymous>:6:1"
chitzui
deixa pra lá, encontrei o problema. Como já era um erro, posso fazer: function foo() { fdasmkl } try { foo() } catch(e) { console.log(e.stack) }imediatamente
chitzui
23

O Webkit agora tem funcionalidade que fornece rastreamentos de pilha:

Web Inspector: Understanding Stack Traces , postado por Yury Semikhatsky na quarta-feira, 20 de abril de 2011 às 7h32 (webkit.org)

Dessa postagem:

Brian M. Hunt
fonte
1
Muito mais conveniente do que criar uma exceção apenas para visualizar sua pilha.
Alex Churchill
O link está quebrado, mas acho que há uma cópia aqui pjh0718.blogspot.com/2016/02/…
Stephen Turner
2

Se você deseja que o rastreamento de pilha corda, eu iria com a resposta de insin: stacktrace.js . Se você deseja acessar as partes de um stacktrace (números de linha, nomes de arquivo, etc) stackinfo , que na verdade usa stacktrace.js sob o capô.

BT
fonte
0

Na verdade não, pelo menos não facilmente.

No IE, você pode depurar o processo do navegador com o MS Script Debugger (que por algum motivo é um componente do Office) ou Visual Studio, e então você pode ver a pilha nos pontos de interrupção.

levik
fonte
0

Você deve experimentar uma boa biblioteca de código aberto TraceKit, que tenta criar rastreamentos de pilha para exceções JavaScript não tratadas em todos os principais navegadores. Você pode ler mais sobre o Tracekit

https://github.com/csnover/TraceKit/

PS : Se você está procurando um serviço (usando Tracekit) com boa IU, você pode tentar Atatus

Fizer Khan
fonte