【发布时间】:2014-01-15 14:17:34
【问题描述】:
今天我发现需要跟踪和检索 Javascript 错误堆栈跟踪来解决它们。
今天我们能够捕获所有的 rest 调用,其想法是,一旦您遇到错误,自动发布该错误的堆栈跟踪以及其余已保存服务的响应,以便我们可以检测、重现和解决问题几乎相同的环境/情况。
作为一项要求,我们被要求制作一个可以包含而不会造成干扰的模块,例如: 在一个 JS 中包含包含 hook 逻辑的模块,不会侵入,在各种 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。
- 如果我们找到一种方法来制作全局包装器会怎样?
- 我们可以调用 stacktrace 并等待捕获吗?
当客户端发生意外错误时,如何将堆栈跟踪发送到我的服务器?有什么建议或好的做法吗?
【问题讨论】:
-
我知道appenlight.com 有一个免费帐户,但有一些限制。但是对于开源项目,它是免费的。我一直关闭这个问题,因为它是为了搜索产品,但我觉得我仍然可以提供一些替代方案,直到它可能被删除
-
@LoïcFaure-Lacroix,它不再搜索产品,我更改了它。你提到的产品是否真的发送了堆栈跟踪,或者只是错误消息和它发生的位置?
-
@Da3 您可以创建一个脚本加载器函数并使用它来代替以通常方式加载脚本。它可以用 XHR 抓取脚本,在它们周围添加
try ... catch,然后评估它们或将它们粘贴到脚本标签中。它会产生一大堆其他问题,例如遇到同源策略并使堆栈跟踪中的文件名无用。另一种选择可能是设置执行相同操作的服务器端脚本加载器代理;这可能会很好。 -
@Da3 在你的服务器上设置一些东西来处理像
{domain}/jsproxy/{scheme}/{url}这样的 URL,例如yourserver.com/jsproxy/http/code.jquery.com/jquery.js。您可以像 PHP example 那样抓取文件并提供它,或者您可以将内容缓存在磁盘或内存中并检查远程资源是否有更改,而不是每次都获取它们。
标签: javascript debugging tracking stack-trace frontend