我们如何跟踪 Javascript 错误?现有的工具真的有用吗?

2024-02-12

今天我发现需要跟踪和检索 Javascript 错误堆栈跟踪来解决这些问题。

今天,我们能够捕获所有其余调用,其想法是,一旦出现错误,就会自动发布该错误的堆栈跟踪以及其余保存的服务的响应,以便我们可以以几乎相同的方式检测、重现和解决问题环境/情况。

作为一项要求,我们被要求制作一个可以被包含而不具有侵入性的模块,例如:将包含钩子逻辑的模块包含在一个JS中,不会是侵入性的,在多个JS文件中包含几行代码就会是侵入性的。

目标是制作一个可以包含在已开发的系统中并跟踪错误事件(如控制台)的工具。

我读过有关此跟踪器逻辑的内容:

  • errorception.com/
  • trackjs.com/
  • atatus.com/
  • 空气刹车.io/
  • jslogger.com/
  • getentry.com/
  • muscula.com/
  • debuggify.net/
  • raygun.io/主页

我们需要做类似的事情,跟踪错误并将其发送到我们的服务器。

正如“达格·纳比特”所说……“现在很难从“野外”发生的错误中获取堆栈跟踪”...

那么,我们有很多付费产品,但它们到底是如何运作的呢?

在 Airbrake 中,他们使用 stacktrace 和 window.onerror:

window.onerror = function(message, file, line) {
  setTimeout(function() {
    Hoptoad.notify({
      message : message,
      stack   : '()@' + file + ':' + line
    });
  }, 100);
  return true;
};

但我无法弄清楚堆栈跟踪何时真正使用。

在某些时候,stacktrace、raven.js 和其他跟踪器需要 try/catch。

  1. 如果我们找到一种制作全局包装器的方法,会发生什么?
  2. 我们可以只调用 stacktrace 并等待捕获吗?

当客户端发生意外错误时,如何将堆栈跟踪发送到我的服务器?有什么建议或好的做法吗?


现在很难从“野外”发生的错误中获取堆栈跟踪,因为 Error 对象不可用于window.onerror.

window.onerror = function(message, file, line) { }

还有一个new error event https://stackoverflow.com/questions/12746034/how-to-get-error-event-details-in-firefox-using-addeventlistener,但此事件尚未公开 Error 对象。

window.addEventListener('error', function(errorEvent) { })

Soon, window.onerror将得到一个第五个参数 https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror包含 Error 对象,您可能可以使用堆栈跟踪.js http://stacktracejs.com/期间抓取堆栈跟踪window.onerror.

<script src="stacktrace.js"></script>
<script>
window.onerror = function(message, file, line, column, error) {
    try {
        var trace = printStackTrace({e: error}).join('\n');
        var url = 'http://yourserver.com/?jserror=' + encodeURIComponent(trace);
        var p = new printStackTrace.implementation();
        var xhr = p.createXMLHTTPObject();

        xhr.open('GET', url, true);
        xhr.send(null);
    } catch (e) { }
}
</script>

在某些时候,Error API 可能会被标准化,但就目前而言,每个实现都是不同的,因此使用 stacktracejs 之类的东西来获取堆栈跟踪可能是明智的,因为这样做需要为每个浏览器提供单独的代码路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们如何跟踪 Javascript 错误?现有的工具真的有用吗? 的相关文章

  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • 在新的 Google 协作平台 <嵌入 HTML> 中使用 localStorage 和 IndexedDB 不起作用

    我正在尝试将新的 Google 协作平台用于我开发的网页 但是 我在存储本地数据时遇到了问题 本地文件在 Windows 和 Apple safari chrome 中运行良好 从 Google 协作平台尝试一下 没有什么乐趣 此外 在 s
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • Draggable JS Bootstrap 模式 - 性能问题

    对于工作中的项目 我们在 JavaScript 中使用 Bootstrap Modal 窗口 我们想让一些窗口可移动 但我们遇到了 JQuery 的性能问题 myModal draggable handle modal header Exa
  • Bootstrap按钮加载+Ajax

    我正在使用 Twitter Bootstrap 的按钮加载状态 http twitter github com bootstrap javascript html buttons http twitter github com bootst
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • DataTables row.add 到特定索引

    我正在替换这样的行项目 var targetRow entity row dataTable targetRow closest table dataTable DataTable dataTable row targetRow remov
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 日期出现奇怪的错误,“未捕获非法访问”

    所以我试图找到最新的DateJavascript 可以处理 我把它减少到 9 月 275760 并增加了我开始捕获未捕获的天数illegal access例外new Date 09 24 275760 to new Date 10 13 2
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening

随机推荐

  • 导入错误:没有名为 parse 的模块

    我正在尝试使用 mongodb 和 pymongo 运行 Web 应用程序来提供数据库中的数据 我收到的错误是 ImportError 没有名为 parse 的模块 请参阅以下来自 apache2 Web 服务器的 error log mo
  • CSS:模糊和反转整个页面的颜色

    当同时使用 webkit 过滤器 模糊 和 反转 时 只有模糊有效 如果 模糊 被删除 反转 就可以了 此外 只有 Chrome 和 Opera 响应该代码 有没有办法让它适用于最新的 IE 和 Firefox 版本 body webkit
  • 在重新启动时保留 ASP.NET 应用程序状态

    有什么好方法可以在重新启动后保留 ASP NET 应用程序状态吗 我希望能够设置一些值重新启动应用程序并让它们仍然存在 我想主要针对甚至不需要数据库的小型 一次性 测试 Web 应用程序执行此操作 有没有办法用静态成员和序列化来做到这一点
  • 如何在没有C库的情况下将整数转换为字符?

    在 C 编程练习中 我被要求在不使用 C 库的情况下将 int 转换为 char 知道如何去做吗 编辑 我所说的 int 是内置的 C C 类型 Thanks Cast it char c char i 或者也许你是这个意思 char c
  • 在大屏幕上修复 FireFox 与 Chrome 中的网站大小

    看起来 Gecko Trident 和 Webkit 在高分辨率屏幕上显示网页的方式不同 Chrome 和新 Opera 等 Webkit 浏览器会缩小页面以匹配屏幕的像素分辨率 然而 这可能会使小文本很难阅读 另一方面 Firefox 和
  • -[__NSCFNumber isEqualToString] 错误

    我遇到了这个崩溃 但是 在我的代码中我使用了一个字符串 我现在已经在这一段代码上工作了 2 个小时 但我看不出我错过了什么 有任何想法吗 NSString codeR NSString stringWithFormat object obj
  • Docker 无法在带有 WSL 2 的 Windows 11 上启动

    我正在尝试使用 WSL 2 设置 docker 来运行 Dockerfile 我下载了 Docker Desktop 当我尝试按照快速入门指南进行操作时 出现以下错误 docker error during connect This err
  • 已回答 - JavaFX:单击时 SubScene 不会在 TabPane 内聚焦? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 看起来像是SubScene or TabPane不是我所期望的或者有问题 Because而不是被专注于Subscene 1 when i
  • Chisel3:对 Vector IO 的多位切片的部分分配

    可以对向量 IO 进行部分赋值 如下所示 import chisel3 class example 1 extends Module val io IO new Bundle val in1 Input Vec 4 Bool val out
  • 基于php的文档管理系统[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 谁能推荐一个简单的文档管理系统和一个不错的网络服务界面 我正在考虑使用它来提供从 ajax Web 应用程序上传的文件的元数据管理 我尝试
  • SVN 仅从存储库更新特定文件

    这个存储库有很多很多 GB 其中 99 是我不需要的 我想做的是仅获取 更新 js css html doc和 pdf 文件 其余的都是巨大的 我想留在那里 而不是浪费时间和磁盘空间 因为我不需要查看它们 而且我永远不会更改它们 我意识到
  • 将 pv 输出(stderr)打印到文件

    我怎样才能打印stderr questions tagged stderr的输出pv questions tagged pv到一个文件 例如 timeout 5s dd if dev random pv r gt dev null 505k
  • UIButton 图像位置取决于 titleLabel 的框架

    我的问题很简单 但我找不到解决方案 我有一个带有标题和图像的 UIButton 我希望无论发生什么情况图像位置都是固定的 所以我这样设置 button setImageEdgeInsets UIEdgeInsetsMake 0 f 0 f
  • Selenium - 如何计算表中的行数?

    我有一个包含 n 行的表 我需要计算它们 该怎么做 示例 我的表格如下所示 Type Balance Date received Date returned Payment method Amount General Default 10
  • 从文件夹 ES6 导入

    我正在学习JS 我有这样的东西 all inside folder reducers reducer1 js export default reducer1 reducer2 js export default reducer2 index
  • 在 React 和 Redux 中处理本地状态

    是否可以将本地状态存储在state与 redux 一起使用 React 时的对象 通过操作将所有内容存储在状态树中很快就会变得乏味 感觉某些状态仅与应用程序的呈现 显示相关 而不与逻辑相关 我所说的演示是指动画 闪烁 面板的展开 收缩状态
  • NetBeans 12.0:“类没有 main 方法”(但有)

    NetBeans 12 0 Jdk 15 我无法启动我的程序 单击绿色运行按钮不会执行任何操作 并且在 MainFrame 上右键单击 运行文件会出现错误 类没有主方法 但正如您在下面的 GIF 中看到的 它确实有一个 main Strin
  • Android 中如何将一个值从一个 Activity 传递到另一个 Activity? [复制]

    这个问题在这里已经有答案了 我创建了一个带有 AutuCompleteTextView ACTV 和按钮的活动 我在 ACTV 中输入一些文本 然后按下按钮 按下按钮后 我希望该活动转到另一个活动 在第二个活动中 我只想将在第一个活动的 A
  • 无限大小的整数?

    在Python中 我可以编写一个程序来计算无限大小的整数 就在前几天 我做了百万分之一斐波那契数 它太大了 无法放入控制台 如果可以在 Python 中做到这一点 据我了解 Python 是用 C 编写的 那么如何在 C 中做到同样的事情呢
  • 我们如何跟踪 Javascript 错误?现有的工具真的有用吗?

    今天我发现需要跟踪和检索 Javascript 错误堆栈跟踪来解决这些问题 今天 我们能够捕获所有其余调用 其想法是 一旦出现错误 就会自动发布该错误的堆栈跟踪以及其余保存的服务的响应 以便我们可以以几乎相同的方式检测 重现和解决问题环境