gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:50:31 25 4
gpt4 key购买 nike

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

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

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

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

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

  • errorception.com/
  • trackjs.com/
  • atatus.com/
  • airbrake.io/
  • jslogger.com/
  • getsentry.com/
  • muscula.com/
  • debuggify.net/
  • raygun.io/home

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

正如“Dagg Nabbit”所说...“很难从现在“野外”发生的错误中获取堆栈跟踪”...

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

在 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 并等待捕获吗?

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

最佳答案

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

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

还有一个new error event ,但此事件尚未公开 Error 对象。

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

很快,window.onerror 将得到 fifth parameter包含 Error 对象,您可以使用 stacktrace.jswindow.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 之类的东西来获取堆栈跟踪可能是明智的,因为这样做需要每个浏览器有一个单独的代码路径。

关于javascript - 我们如何跟踪 Javascript 错误?现有的工具真的有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20810009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com