web-dev-qa-db-ja.com

node.jsスタックエラーで10行以上ですか?

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を超える通話を取得する方法はありますか?

83

そのための最も簡単な解決策は、次のようにコードを開始することです。

Error.stackTraceLimit = Infinity;

SetTimeout/setInterval呼び出しにまたがるスタックトレースを表示する場合は、より洗練された https://github.com/mattinsler/longjohn が最適です。

120
Mariusz Nowak

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

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

ちなみに、発生する可能性は低いと思われるが、デバッグのために数時間無駄にした別のことは、スタックサイズ(デフォルトは492 kB)です。スタックが使い果たされると(RangeError追加情報なしで)非常に有益なエラーが発生する可能性があります。 以下でスタックサイズを増やすことができます

node --stack-size=1024 debug.js //デフォルト492

コールバックからコールバックへのコールバックの連鎖の世界では、プログラムがこれを念頭に置いていない場合、実際には大きな入力サイズのスタックサイズを超えるのは非常に簡単です。

スタック関連のすべてのオプションを表示するには:

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

53
jakub.g

https://github.com/tlrobinson/long-stack-traces モジュールを使用します。

5
3rdEden

ビルトインデバッガー を使用することもできます。これにより、使い慣れた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/...
0
zbycz