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 2017年

そして明らかに、スタックトレースは非同期操作を追跡しません。つまり、非同期呼び出しのコールバックでは、スタックは最初から始まります(基本的には空です)。
x-yuri 2017年

@ x-yuri Node.jsチームはそれに取り組んでいます(github.com/nodejs/node/issues/11865)それ以外の場合、--inspectまたは--inpect-brkコマンドを使用してノードアプリケーションを実行すると、Chromeデバッガーにフルスタックが表示されます
Mariusz Nowak '21

うーん、これは私を夢中にさせていました。この情報をありがとう!
Kris Oye

65

スタックトレース制限をコマンドラインパラメータとして次のように渡すことができますnode

node --stack-trace-limit=1000 debug.js //デフォルト10

ちなみに、発生する可能性は低いと思われますデバッグに数時間を費やしただけのもう1つのことは、スタックサイズ(デフォルトは492 kB)です。スタックが使い果たされた場合(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-scriptnode直接呼び出さない場合に便利です。
Bluu


-1

また、組み込みのデバッガを使用して、おなじみのGoogle Chromeの開発ツールデバッガを開くこともできます。エラーが発生すると停止し、スタック全体を参照できます。とにかく走れ:

$ 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.