我们如何跟踪 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 错误?现有的工具真的有用吗? 的相关文章

随机推荐

  • 导入错误:没有名为 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 错误堆栈跟踪来解决这些问题 今天 我们能够捕获所有其余调用 其想法是 一旦出现错误 就会自动发布该错误的堆栈跟踪以及其余保存的服务的响应 以便我们可以以几乎相同的方式检测 重现和解决问题环境