深入v8提供的堆栈跟踪

本文介绍了在前端开发中,V8提供的Error关键字及其使用方式,包括Error作为函数的用法、不同类型的Error,以及如何获取和自定义堆栈跟踪。通过Error.captureStackTrace()方法可以方便地收集和控制堆栈信息,用于自定义Error类或获取调用堆栈。文章还探讨了使用场景和最佳实践,推荐在自定义Error类时使用`Error.captureStackTrace(this, this.constructor)`来隐藏内部实现细节。" 113344935,7489097,三阶最小二乘法公式推导,"['算法', '线性代数']
摘要由CSDN通过智能技术生成

错误定位是开发中的一项必备的重要能力,我们来看下在前端开发中v8为我们提供的Error关键字

Error作为函数使用

当像函数一样使用 Error 时 – 如果没有 new,它将返回一个 Error 对象。所以, 仅仅调用 Error 将产生与通过new 关键字构造 Error 对象的输出相同。

// this:
const x = Error('I was created using a function call!');
​​​​// has the same functionality as this:
const y = new Error('I was constructed via the "new" keyword!');

Error 类型

除了通用的Error构造函数外,JavaScript还有6个其他类型的错误构造函数

  • EvalError
    创建一个error实例,表示错误的原因:与 eval() 有关。
  • InternalError
    创建一个代表Javascript引擎内部错误的异常抛出的实例。 如: “递归太多”.
  • RangeError
    创建一个error实例,表示错误的原因:数值变量或参数超出其有效范围。
  • ReferenceError
    创建一个error实例,表示错误的原因:无效引用。
  • SyntaxError
    创建一个error实例,表示错误的原因:eval()在解析代码的过程中发生的语法错误。
  • TypeError
    创建一个error实例,表示错误的原因:变量或参数不属于有效类型。
  • URIError
    创建一个error实例,表示错误的原因:给 encodeURI()或 decodeURl()传递的参数无效。

创建V8时抛出的所有内部错误都将捕获堆栈跟踪。可以通过非标准error.stack属性从JavaScript访问此堆栈跟踪。V8还具有各种钩子,用于控制如何收集和格式化堆栈跟踪,并允许自定义错误也收集堆栈跟踪。本文档概述了V8的JavaScript堆栈跟踪API。

基本堆栈跟踪

默认情况下,V8引发的几乎所有错误都具有一个stack属性,该属性保存最顶层的10个堆栈帧,格式为字符串。这是一个完全格式化的堆栈跟踪的示例:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值