在Java中,我们使用内置的方法来打印堆栈跟踪。
在Nodejs中,它在错误对象中提供了captureStackTrace 方法来获取调用堆栈信息。它创建了带有目标对象信息的.stack 属性。
它提供了用户定义的函数来捕获堆栈调用跟踪。
语法:
captureStackTrace(Object[, constructorFunciton])
Object:它是一个目标错误对象,返回包含堆栈跟踪的位置代码的行号的字符串。一个constructorFunciton:错误的自定义对象
这里是一个Nodejs captureStackTrace example
const employee = { "id": 1, "name": "john" };
Error.captureStackTrace(employee);
console.log(employee.stack);
输出:
A:\work\nodework>node error.js
john
at Object.<anonymous> (A:\work\nodework\error.js:2:7)
at Module._compile (internal/modules/cjs/loader.js:1068:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:933:32)
at Function.Module._load (internal/modules/cjs/loader.js:774:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
让我们看看另一个例子
让我们定义函数,打印stack 属性,并返回未定义。
function MyError() {
}
console.log(new MyError().stack);
输出:
undefined
让我们在函数中加入带有错误对象的captureStackTrace方法。
function MyError() {
Error.captureStackTrace(this, MyError);
}
console.log(new MyError().stack);
输出:
Error
at Object.<anonymous> (A:\work\nodework\error.js:8:13)
at Module._compile (internal/modules/cjs/loader.js:1068:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
at Module.load (internal/modules/cjs/loader.js:933:32)
at Function.Module._load (internal/modules/cjs/loader.js:774:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
它可以帮助用户隐藏执行错误的细节