”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何捕获 JavaScript 中自定义异常的堆栈跟踪?

如何捕获 JavaScript 中自定义异常的堆栈跟踪?

发布于2024-11-08
浏览:923

How to Capture Stack Traces of Custom Exceptions in JavaScript?

获取一系列抛出的异常

虽然 JavaScript 允许引发异常,但获取自定义异常的堆栈跟踪可能具有挑战性。本文探讨了专门针对用户定义的异常检索堆栈跟踪的各种方法。

Error 对象的 stack 属性提供了一个简单的解决方案。通过创建一个新的 Error 对象并访问其 stack 属性,您可以捕获跟踪:

function stackTrace() {
    var err = new Error();
    return err.stack;
}

此方法生成类似于以下内容的堆栈跟踪:

DBX.Utils.stackTrace@http://localhost:49573/assets/js/scripts.js:44
DBX.Console.Debug@http://localhost:49573/assets/js/scripts.js:9
.success@http://localhost:49573/:462
x.Callbacks/c@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
x.Callbacks/p.fireWith@http://localhost:49573/assets/js/jquery-1.10.2.min.js:4
k@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6
.send/r@http://localhost:49573/assets/js/jquery-1.10.2.min.js:6

这种格式提供了调用函数、URL以及后续调用函数。

对于现代浏览器,可以使用更直接的方法:

console.trace(); // (MDN Reference)

此函数捕获堆栈跟踪并将其显示在控制台中。

原始线程中提出了替代选项:

function stacktrace() { 
  function st2(f) {
    return !f ? [] : 
        st2(f.caller).concat([f.toString().split('(')[0].substring(9)   '('   f.arguments.join(',')   ')']);
  }
  return st2(arguments.callee.caller);
}

该函数递归遍历调用堆栈并构造堆栈跟踪字符串。

通过实现这些方法,开发人员可以有效获取自定义 JavaScript 异常的堆栈跟踪,从而实现更稳健的错误处理和调试.

版本声明 本文转载于:1729175015如有侵犯,请联系[email protected]删除
最新教程 更多>
  • `&deployment` 指针如何实现 Kubernetes 中的 `runtime.Object` 接口?
    `&deployment` 指针如何实现 Kubernetes 中的 `runtime.Object` 接口?
    &deployment指针如何满足运行时对象接口在Kubernetes代码中,kubectl/run.go中的Generate函数返回包含runtime.Object 和错误的结果列表。函数最后一行,return &deployment, nil,将局部变量deployment的地址赋值给r...
    编程 发布于2024-11-08
  • 用于带或不带协议的 URL 匹配的通用正则表达式
    用于带或不带协议的 URL 匹配的通用正则表达式
    匹配带或不带协议的 URL 的正则表达式对于可能包含或不包含“http://www”前缀的 URL ,可以使用正则表达式来执行匹配操作。下面提供了详细的正则表达式模式:((https?|ftp)://)?([a-z0-9 !*(),;?&amp=$_.-] (:[a-z0-9 !*(),;?...
    编程 发布于2024-11-08
  • 如何防止 Foreach 循环输出中出现尾随逗号?
    如何防止 Foreach 循环输出中出现尾随逗号?
    消除 Foreach 循环中的尾随逗号在编程中,通常需要迭代项目列表并单独输出每个项目通过分隔符,例如逗号。但是,当使用 foreach 循环执行此任务时,您可能会遇到最后一项后面出现尾随逗号的问题。考虑以下 PHP 代码:foreach ($this->sinonimo as $s){ ...
    编程 发布于2024-11-08
  • LZ C++ React Native 绑定,实现极快的压缩算法
    LZ C++ React Native 绑定,实现极快的压缩算法
    我最近开始涉足 JSI 和 C,因此,我必须构建一个名为react-native-lz4 的小包。它是一个在 React Native 中使用 C 编写的 LZ4 算法进行快速文件压缩的​​库。 它仍处于实验阶段,因为我仍在完善错误处理并扩展其 API,但它已经可以使用(谨慎!) 包:https:/...
    编程 发布于2024-11-08
  • JVM GC 能像 Go 一样实现 1ms 以下的暂停吗?
    JVM GC 能像 Go 一样实现 1ms 以下的暂停吗?
    JVM 能否像 Go 一样将 GC 暂停时间减少到 1 毫秒以下?Go 编程语言拥有较低的 GC 暂停时间,通常低于 100 微秒。然而,Java 虚拟机 (JVM) 在实现类似性能方面面临着挑战。架构限制历史上,Go 和 Java 之间的架构差异影响了 GC 暂停时间.Go 的非压缩收集器: Go...
    编程 发布于2024-11-08
  • 如何在 PHP 中根据特定键对多维数组进行自定义排序?
    如何在 PHP 中根据特定键对多维数组进行自定义排序?
    多维数组的自定义排序对多维数组进行排序是编程中的常见任务。本文演示如何使用 PHP usort() 函数根据特定键对此类数组进行排序。理解任务考虑以下多维数组,其中每个元素代表一条记录:Array ( [0] => Array ( [iid] =...
    编程 发布于2024-11-08
  • 如何在 Laravel 5 中使用数字规则验证数字输入的长度?
    如何在 Laravel 5 中使用数字规则验证数字输入的长度?
    Laravel 5 中数字输入的长度验证在 Laravel 5 中验证数字输入的长度时,可能会遇到大小规则问题。它不检查输入的长度,而是检查输入是否完全等于指定的大小。要解决此问题,应使用数字规则。根据 Laravel 文档:$rules = [ 'national-id' => 'r...
    编程 发布于2024-11-08
  • 如何从 jQuery 下拉列表中检索选项的文本?
    如何从 jQuery 下拉列表中检索选项的文本?
    从 jQuery 下拉列表中检索选项文本获取与 jQuery 下拉列表中的特定选项标记关联的文本,使用以下技术:Option Based on Value获取文本具有特定值的选项,即使未选择,也使用选择器:$("#list option[value='2']").text();此...
    编程 发布于2024-11-08
  • 使用 Slack、GitHub、Jira、Google 工具等进行有用的自动化
    使用 Slack、GitHub、Jira、Google 工具等进行有用的自动化
    我们使用与各种应用程序(如 GitHub、Slack、Jira、Google Calendar、Google Sheets 等)的集成,在 AutoKitteh 上部署的 Python 中构建了相对简单但有用的自动化。例如: 使用 ChatGPT 对 Gmail 收件箱中的新电子邮件进行分类,并将通...
    编程 发布于2024-11-08
  • 如何使用 Kubernetes go-client 检索详细的 pod 信息,类似于“kubectl get pods”命令?
    如何使用 Kubernetes go-client 检索详细的 pod 信息,类似于“kubectl get pods”命令?
    Kubernetes go-client:检索 Pod 详细信息 像 kubectl get pods使用 client-go 库获取 Kubernetes 集群中的 pod 详细信息,与 kubectl get pods -n 命令类似,步骤如下:创建 Kubernetes 客户端:获取 Kub...
    编程 发布于2024-11-08
  • 使用 nodeJS 从头开始​​创建 ReAct Agent(维基百科搜索)
    使用 nodeJS 从头开始​​创建 ReAct Agent(维基百科搜索)
    Introduction We'll create an AI agent capable of searching Wikipedia and answering questions based on the information it finds. This ReAct (R...
    编程 发布于2024-11-08
  • 为什么 Streams API 改变了 Web 开发者的游戏规则
    为什么 Streams API 改变了 Web 开发者的游戏规则
    我们首先解释一下数据是如何通过网络发送的。它不是作为单个连续流发送的;相反,它被分成更小的块。在接收端,消费者或应用程序负责在收到所有数据后以正确的顺序和格式重新组装这些块。对于图像、视频和其他相对较大的数据类型,此过程会自动发生。 因此 Streams API 提供的是一种无需等待完整数据可用的方...
    编程 发布于2024-11-08
  • ES6 模板文字真的可以重用吗?
    ES6 模板文字真的可以重用吗?
    ES6 模板文字中的可重用性难题本次讨论中提出的主要问题围绕着 ES6 模板文字中假定缺乏可重用性的问题。传统的演示强调声明时的替换,不允许运行时修改。解决方案:利用函数构造函数为了解决这个问题,一个可行的解决方案以以下形式出现:函数构造函数。这种方法涉及将模板字符串转换为函数。考虑以下代码片段:c...
    编程 发布于2024-11-08
  • 单元测试框架——Python 中的单元测试
    单元测试框架——Python 中的单元测试
    在Python中,最常用的单元测试框架之一是unittest,它包含在标准库中。它提供了一套丰富的工具来创建和运行测试以及报告结果。 单元测试框架的主要特点 测试用例:测试用例是通过子类化unittest.TestCase来创建的。类中以 test_ 开头的每个方法都被视为一个测试。 Asserti...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3