node.js 스택 오류에 10 줄 이상이 있습니까?


93

node.js 스택 오류에서 10 줄 이상을 얻는 방법이 있습니까?

function a() { dieInHell(); }
function b() { a(); }
function c() { b(); }
function d() { c(); }
function e() { d(); }
function f() { e(); }
function g() { f(); }
function h() { g(); }
function i() { h(); }
function j() { i(); }
function k() { j(); }
function l() { k(); }
function m() { l(); }
function n() { m(); }
function o() { n(); }
function p() { o(); }
function q() { p(); }

try {
    q();
}
catch(e) {
    console.log(e.stack);
}

쇼 :

$ node debug.js 
ReferenceError: dieInHell is not defined
    at a (/Users/julien/tmp/debug.js:2:5)
    at b (/Users/julien/tmp/debug.js:6:5)
    at c (/Users/julien/tmp/debug.js:10:5)
    at d (/Users/julien/tmp/debug.js:14:5)
    at e (/Users/julien/tmp/debug.js:18:5)
    at f (/Users/julien/tmp/debug.js:22:5)
    at g (/Users/julien/tmp/debug.js:26:5)
    at h (/Users/julien/tmp/debug.js:30:5)
    at i (/Users/julien/tmp/debug.js:34:5)
    at j (/Users/julien/tmp/debug.js:38:5)

10 개 이상의 전화를받을 수있는 방법이 있습니까?


더 나은 디버깅은 Node.JS의 향후 버전에서 우선 순위입니다
BRampersad

아직이 작업을 수행 할 수 없다고 귀하의 의견에서 따릅니 까?
Julien Genestoux 2011 년

아니. 하지만 더 나은 디버깅은 .6에 대한 목록에 있습니다. :)
BRampersad

답변:


138

이를위한 가장 쉬운 해결책은 다음과 같이 코드를 시작하는 것입니다.

Error.stackTraceLimit = Infinity;

setTimeout / setInterval 호출에 걸쳐있는 스택 추적을보고 싶다면보다 정교한 https://github.com/mattinsler/longjohn 이 좋습니다.


2
마지막으로 시도했을 때 Error.stackTraceLimit이 나를 위해하지 않았습니다.
BT

일부 패키지는 변경 될 수 있습니다stackTraceLimit . 또한 그것은 Error.stack내가 볼 수있는 것에서 당신이 얻는 것에 영향을 미칩니다 . 내장 디버거는 항상 전체 스택을 표시합니다 ( bt명령).
x-yuri

그리고 분명히 스택 추적은 비동기 작업을 따르지 않습니다. 즉, 비동기 호출의 콜백에서 스택은 처음부터 시작됩니다 (기본적으로 비어 있음).
x-yuri

@ x-yuri Node.js 팀이 작업 중입니다 ( github.com/nodejs/node/issues/11865 ) 그렇지 않으면 --inspect또는 --inpect-brk명령을 사용 하여 노드 애플리케이션 을 실행할 때 Chrome 디버거에 전체 스택이 표시됩니다
Mariusz Nowak

Omg 이것은 나를 미치게 만들었다. 이 정보에 감사드립니다!
Kris Oye

65

스택 추적 제한을 명령 줄 매개 변수로 node다음에 전달할 수 있습니다 .

node --stack-trace-limit=1000 debug.js // 기본값 10

일어날 것 같지는 않지만 디버깅에 몇 시간을 낭비하는 또 다른 일인 BTW 는 스택 크기 (기본값은 492kB) 입니다. 스택이 소진되면 ( RangeError추가 정보없이) 매우 유익하지 않은 오류가 발생할 수 있습니다 . 다음을 사용하여 스택 크기를 늘릴 수 있습니다 .

node --stack-size=1024 debug.js // 기본값 492

콜백-콜백-콜백 체인의 세계에서 프로그램이이를 염두에두고 작성되지 않은 경우 실제로 큰 입력 크기에 대한 스택 크기를 초과하는 것은 매우 쉽습니다.

모든 스택 관련 옵션을 보려면 :

node --v8-options | grep -B0 -A1 stack


3
--stack-trace-limit는 0.10.22에서 여전히 작동합니다. 감사합니다!
Riplexus 2014 년

3
Node.js v8.0.0부터는 NODE_OPTIONS환경 변수 (예 : NODE_OPTIONS='--stack-trace-limit=10000' /path/to/some-script. node직접 호출하지 않는 경우 유용합니다 .
Bluu


-1

또한 친숙한 Google 크롬의 개발 도구 디버거를 여는 내장 디버거를 사용할 수 있습니다 . 오류가 발생하면 중지되며 전체 스택을 탐색 할 수 있습니다. 그냥 실행 :

$ node --inspect debug.js

Debugger listening on port 9229.
To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.