什么是 stacktrace 以及如何在 node.js 中打印?
Node.js 是一个可用于服务器端脚本的开源项目。 Node.js 是一个跨平台的,它允许开发人员编写代码而不必担心运行时环境。 Node.js 广泛用于构建动态、轻量级和可扩展的 Web 应用程序。 Node.js 提供了一个可用于前端和后端开发的 JavaScript 运行时环境。但是,应用程序经常抛出必须处理的错误或异常。
JVM 会自动显示堆栈跟踪,以指示在程序执行期间发生了错误。堆栈跟踪用于在程序执行期间跟踪特定实例处的活动堆栈帧。堆栈跟踪在调试代码时很有用,因为它显示了导致错误的确切点。 Node.js 中的错误可以分为四大类:
- 标准 JavaScript 错误
- 系统错误
- 用户指定的错误
- 断言错误
Node.js 支持多种机制来传播和处理程序执行期间发生的错误。通过抛出可以在堆栈跟踪中查看的错误来立即处理所有标准 JavaScript 错误。
在 Node.js 中打印堆栈跟踪有四种方法:
- 使用 error.stack 属性: error.stack 属性描述了代码中错误被实例化的点。
句法:
error.stack
例子:
console.log("This program demonstrates " + "stack trace in Node.js"); var err = new Error().stack console.log(err);
输出:
This program demonstrates stack trace in Node.js Error at Object. (/home/cg/root/2523129/main.js:20:11) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:389:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:504:3
- 使用 Error.captureStackTrace() 方法:此方法在 obj 上创建一个 .stack 属性,该属性返回一个字符串,该字符串表示调用 Error.captureStackTrace(obj) 的代码中的点。 func 参数表示一个可选的函数。
句法:
Error.captureStackTrace(obj, func)例子:
const obj = {}; Error.captureStackTrace(obj); console.log(obj.stack); // Alternatively function MyNewError() { Error.captureStackTrace(this, MyNewError); } console.log(new MyNewError().stack);
输出:
Error at Object. (/home/cg/root/2523129/main.js:25:13) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:389:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:504:3
- 使用 try-catch 块:这是一种错误处理机制,当一段代码被包围在 try 块中并向 catch 块抛出错误时使用。如果错误没有得到处理,那么程序会突然终止。
例子:
try { throw new Error("Error occurred"); } catch(e) { console.log(e); }
输出:
Error at Object. (/home/cg/root/2523129/main.js:25:13) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:389:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:504:3
- 使用跟踪命令: console.trace() 方法用于显示表示代码如何在某个点结束的跟踪。
例子:
console.trace("hello world");
输出:
Trace: hello world at Object. (/home/cg/root/2523129/main.js:28:9) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.runMain (module.js:604:10) at run (bootstrap_node.js:389:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:504:3