JavaScript Error 与堆栈追踪
Error对象深入:Error.captureStackTrace(V8)、error.stack堆栈字符串、Error Cause链、AggregateError多个错误聚合、自定义Error类(class MyError extends Error)、source-map堆栈映射到源码 · 难度:入门 · +10XP
JavaScript Error 与堆栈追踪
当程序出错时,error.stack包含了从抛出位置到调用入口的完整调用链。理解堆栈追踪能大幅提升你的调试效率。
读取堆栈
try {
throw new Error('出错了!');
} catch (err) {
console.log(err.message); // '出错了!'
console.log(err.stack);
// Error: 出错了!
// at foo (script.js:5:9)
// at bar (script.js:10:3)
// at script.js:15:1
}
自定义Error类
class APIError extends Error {
constructor(message, statusCode) {
super(message);
this.name = 'APIError';
this.statusCode = statusCode;
Error.captureStackTrace(this, APIError); // V8特有,从堆栈中排除构造函数
}
}
动手练习
- 基础练习:故意写一个多层调用的错误,查看stack属性的完整调用链。
- 进阶应用:自定义Error类,包含额外的错误上下文信息。
- 项目实战:集成source-map让压缩后的代码错误能映射回源码位置。