情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでスタックトレースのフレームの最大数を設定する

スタックトレースのフレームの最大数はError.stackTraceLimitで設定します。

デフォルトは10です。

また、負数や非数が指定された場合には0となります。

サンプルコード1

error-stack-trace-limit-1.js

最初に、スタックトレースのフレームの最大数がデフォルトの状態でError.captureStackTrace関数でスタックトレースを取得します。

次に、スタックトレースのフレームの最大数を2に設定し、スタックトレースを取得します。

var obj1 = {};
Error.captureStackTrace(obj1);
console.log(obj1.stack);

Error.stackTraceLimit = 2;

var obj2 = {};
Error.captureStackTrace(obj2);
console.log(obj2.stack);

実行結果

スタックトレースのフレームの最大数が正しく変わっていることが分かります。

C:\work\node>node error-stack-trace-limit-1.js
Error
    at Object.<anonymous> (C:\work\node\error-stack-trace-limit-1.js:2:7)
    at Module._compile (module.js:397:26)
    at Object.Module._extensions..js (module.js:404:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:429:10)
    at startup (node.js:139:18)
    at node.js:999:3
Error
    at Object.<anonymous> (C:\work\node\error-stack-trace-limit-1.js:8:7)
    at Module._compile (module.js:397:26)

サンプルコード2

error-stack-trace-limit-2.js

最初に、スタックトレースのフレームの最大数がデフォルトの状態で例外を発生させ、キャッチし、エラーオブジェクトからスタックトレースを取得します。

次に、スタックトレースのフレームの最大数を2に設定し、例外を発生させ、キャッチし、エラーオブジェクトからスタックトレースを取得します。

try {
    throw new Error('error 1.');
}
catch (err) {
    console.log(err.stack);
}

Error.stackTraceLimit = 2;

try {
    throw new Error('error 2.');
}
catch (err) {
    console.log(err.stack);
}

実行結果

スタックトレースのフレームの最大数が正しく変わっていることが分かります。

C:\work\node>node error-stack-trace-limit-2.js
Error: error 1.
    at Object.<anonymous> (C:\work\node\error-stack-trace-limit-2.js:2:8)
    at Module._compile (module.js:397:26)
    at Object.Module._extensions..js (module.js:404:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:429:10)
    at startup (node.js:139:18)
    at node.js:999:3
Error: error 2.
    at Object.<anonymous> (C:\work\node\error-stack-trace-limit-2.js:11:8)
    at Module._compile (module.js:397:26)

サンプルコード3

error-stack-trace-limit-3.js

最初に、スタックトレースのフレームの最大数がデフォルトの状態でconsole.trace関数で標準エラー出力にメッセージ付きのスタックトレースを出力します。

次に、スタックトレースのフレームの最大数を2に設定し、標準エラー出力にメッセージ付きのスタックトレースを出力します。

console.trace('stack trace #1');

Error.stackTraceLimit = 2;

console.trace('stack trace #2');

実行結果

スタックトレースのフレームの最大数が正しく変わっていることが分かります。

C:\work\node>node error-stack-trace-limit-3.js
Trace: stack trace #1
    at Object.<anonymous> (C:\work\node\error-stack-trace-limit-3.js:1:71)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
    at Function.Module._load (module.js:407:3)
    at Function.Module.runMain (module.js:575:10)
    at startup (node.js:159:18)
    at node.js:444:3
Trace: stack trace #2
    at Object.<anonymous> (C:\work\node\error-stack-trace-limit-3.js:5:9)
    at Module._compile (module.js:541:32)

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js