Sentry-javascript: 找不到 index.js 的源代码

创建于 2018-12-06  ·  28评论  ·  资料来源: getsentry/sentry-javascript

套餐+版本

  • [ ] @sentry/browser
  • [x] @sentry/node
  • [ ] raven-js
  • [ ] raven-node _(节点乌鸦)_
  • [ ] 其他:

版本:

4.4.1

描述

以下事件捕获代码将在解析事件时在 Sentry 中产生错误: Source code was not found for /.../index.js

const Sentry = require('@sentry/node');

Sentry.init({ dsn: 'https://5d29[...][email protected]/13[...]6' });

(async () => {
  const sentryEvent = await Sentry.Parsers.parseError(new Error('Test'));
  Sentry.captureEvent(sentryEvent);
})();

这是事件在 Sentry 中的样子:
Sentry Event Screenshot

Needs Information

最有用的评论

好的,所以这对我来说看起来像是一个 UX 错误。 在我看来,它应该(至少对于 Node.js 项目)只是一个警告,它不能说Source code was not found而是像Source maps were not found 。 这样可以防止出现超过一年历史的问题;)
如果您愿意,您可以将此问题作为报告重新提交给在前端/显示部分工作的任何人,或者将其关闭并向他们报告此误解。 非常感谢您终于澄清了这一点!

所有28条评论

您可以发布活动的直接链接吗?

(您还错过了之前屏蔽的堆栈跟踪屏幕截图中的一些路径😅)

您不直接使用Sentry.captureException而是想创建自己的事件的任何特殊原因?

是的,这就是事件: https ://sentry.io/share/issue/e2c8d20b66d2406cb32c540d87654b4a/(稍作修改以不发布我们的dsn)

我使用Sentry.captureEvent()的原因如下:我正在维护一个hapi插件,该插件捕获 hapi 路由处理程序抛出的错误事件(丰富了请求数据)。 参见: hapi-sentry ./index.js#L41-L67

@guischdi出现此错误的原因是远程服务器无法访问本地文件路径。
Sentry 正在尝试获取和解析/something/local/src/app.js并从中读取源代码以提供更好的错误映射(它与 sourcemap 文件的工作方式相同)。

要上传您的文件,您可以使用我们的 CLI https://docs.sentry.io/cli/或 Webpack 插件https://github.com/getsentry/sentry-webpack-plugin

这是源地图上的一些旧文档,但新 SDK https://docs.sentry.io/clients/node/sourcemaps/的概念是相同的(它都以相同的方式适用于您当前的问题)。

还有一个现有的集成,您可以使用它来重写每一帧中的路径https://github.com/getsentry/sentry-javascript/blob/master/packages/core/src/integrations/pluggable/rewriteframes.ts

例如:

Sentry.init({
  dsn: "https://[email protected]/297378",
  integrations: [new Sentry.Integrations.RewriteFrames()]
});

/something/local/src/app.js更改app:///app.jsapp:///是我们的内部前缀),因此当您将app.js上传到您的哨兵发布工件时,它将被正确读取而无需需要获取外部文件。

基本上你需要做的是:

  • init调用中设置release
  • 将您的资源上传到 Sentry 中的同一版本
  • 确保您捕获的错误帧与您上传文件中的帧相对应

希望它能为你清除一些东西。 如果您需要更多帮助,请随时提出任何问题。

嗨@kamilogorek
感谢您的详细回答。

我做对了吗:在 Sentry 中显示 Node.js 应用程序的堆栈跟踪的常用方法是通过 RewriteFrames 集成或手动上传每个版本的文件? 如果是这样,为什么会显示captureException /catch-all 上的堆栈跟踪并且没有触发“找不到源代码”错误。

我测试了在node_modules库中抛出错误的工作原理。 错误会被正确报告,包括来自 lib 的源代码。 见https://sentry.io/share/issue/2b95ecb13ce24227b2184b2561e4f6e3/

那么为什么这对captureException而对captureEvent失败?

Sentry Screenshot

@guischdi你能过去两个事件的完整链接吗? 不能分享的吗? 我可以通过管理员权限访问它们。

另外,我将在接下来的 3 周内不在办公室,所以当我回来时,我会尝试回到这个。

@kamilogorek

  • captureEvent链接
  • captureException链接

谢谢你看看这个!

@kamilogorek你的意思是我也需要为每个版本上传整个node_modules文件夹吗? 为什么在服务器上运行时@sentry/node并且所有这些资源都可用,但无法上传所需的文件并报告错误?

我确认在设置框架集成并基本上上传整个node_modules解决了这个问题。 但是上传这么多 node_modules 文件的过程非常缓慢。

我相信解决方案是:

  1. 允许哨兵上传整个版本的.tar
  2. 将节点项目编译为单个.js.map并仅部署和上传这两个文件。

另外,我在引用不在node_modules npm 包中的原始.ts文件的源映射时遇到问题 - https://github.com/prisma/graphql-middleware/issues/159

@kamilogorek关于这个问题的任何消息?

我还可以确认重写框架是我们的解决方案。

我们的情况有点不同,我们试图让 sourcemaps 工作,但缩小的文件始终是 Sentry 使用的文件。 对于相应的版本,我们正在上传缩小文件以及相关的源地图。 Sentry 似乎没有找到源图,并且默认为缩小文件(尽管它仍然托管在与源图相同的路径中)。

我们刚刚将new Integrations.RewriteFrames()添加到 Sentry 初始化的集成键中,并且开始为每个新问题获取源映射。

很高兴知道, RewriteFrames集成和上传node_modules似乎可以解决问题。 但首先(正如@mieszko4已经提到的),上传这么多文件很烦人。 此外,我最初的发现是,

显示captureException /catch-all 上的堆栈跟踪,并且没有触发“未找到源代码”错误

因此,以下问题仍然悬而未决:

那么为什么这对captureException而对captureEvent失败?

或者更准确地说:可以简单地通过captureException捕获错误而不会出现问题,但是通过captureEvent捕获需要上传所有文件( RewriteFrames集成或手动)以防止“找不到源代码”-错误。 这是一个错误还是有意的,@kamilogorek?

@guischdi对这么晚的回复感到抱歉。 我有点失去了踪迹。 你能刷新我的记忆这里发生了什么并提供一些示例事件吗?

@kamilogorek
是的,我们的问题是:

  • captureException工作得很好,即使node_module抛出错误; 看到这个测试异常
  • captureEvent给哨兵打气: error encountered while processing this event: [...] Source code was not found ; 看到这个测试事件

@guischdi只是为了确认,这是原始节点 js 文件,对吗? 没有 webpack,没有编译,没有源映射。 只有一个index.js文件在不同的线路上有 2 个不同的调用? 如果可能的话,你能提供这个文件的内容吗?

@kamilogorek
是的,原始的nodeJS。 看看我上面链接的第二个问题。 您已经在那里看到了index.js所有 13 行。

@guischdi我们正在调查它为什么会这样(具有相同 url 的 2 个连续帧会触发此行为)。 同时,您可以在项目设置中关闭“启用 JavaScript Source Fetching”,例如。 https://sentry.io/settings/kamil-ogorek/projects/testing-project/
它是节点应用程序,所以这样做没有意义。

@kamilogorek好的,我关闭了“启用 JavaScript 源提取”设置并触发了另一个错误。 但仍然是1 error encountered while processing this event: [...] Source code was not found (请参阅本期

奇怪,这对我来说很好。 无论如何,我们将尝试调查为什么会发生这种情况,尽管我不能保证它何时发生,因为这不是阻止任何工作的主要问题。 会及时向大家发布!

@kamilogorek有这方面的消息吗?

对我来说,问题视图报告源代码缺少一些文件,但它们都存在并且可以在堆栈跟踪下查看。

我正在运行 Sentry 自托管并使用@sentry/node 5.4.3

这是我的代码:

// file: <path>/code/cli
const Sentry = require('@sentry/node');
Sentry.init({ dsn: process.env.SENTRY_DSN });
function test () {
  throw new Error('test');
}
test();

我也收到此错误:

image

这是堆栈:

Error: test
  File "<path>/code/cli", line 10, col 9, in test
    throw new Error('test');
  File "<path>/code/cli", line 13, col 1, in Object.<anonymous>
    test();
  File "internal/modules/cjs/loader.js", line 1063, col 30, in Module._compile
  File "internal/modules/cjs/loader.js", line 1103, col 10, in Module._extensions..js
  File "internal/modules/cjs/loader.js", line 914, col 32, in Module.load
  File "internal/modules/cjs/loader.js", line 822, col 14, in Module._load
  File "internal/modules/cjs/loader.js", line 1143, col 12, in Module.runMain
  File "internal/main/run_main_module.js", line 16, col 11, in null.<anonymous>

我也遇到Source code was not found这个问题

@LukeXF你能提供一个受影响事件的链接吗?

即使您收到“找不到源代码”错误,您也可以看到源上下文(即相关行上方和下方的代码)的原因是在 SDK 中,在我们发送事件之前,我们将此信息记录处理堆栈跟踪的一部分。 错误来自服务器_也_试图填写该信息。

不过,这对我们来说是一个错误,因为我们实际上并不希望您在每个版本中都上传node_modules (对于节点应用程序;对于浏览器应用程序,您可能无论如何都会捆绑/缩小)。 应该由 https://github.com/getsentry/sentry/pull/17538 修复,它将在几个小时内部署。

一旦修复成功,任何在这里发表评论的人都可以告诉我们您是否仍有问题/问题,以及它们是什么? 如果需要,很高兴重新打开它。

嗨@lobsterkatie
再次测试它,使用以下代码段(从 npm 上的当前 README 中删除):

const Sentry = require('@sentry/node');

Sentry.init({ dsn: process.env.DSN });

(async () => {
  Sentry.captureException(new Error('Good bye'));
})();

不幸的是,我们仍然在https://sentry.io/share/issue/0247fe07741c4e358089461f113cef42/上收到Source code was not found错误
您昨天介绍的修复程序是否已经部署?

还使用当前 v4.xx 版本 (v4.6.6) 和 @sentry/node 的最新版本 (v5.14.0) 进行了测试。

@guischdi您没有上传任何工件,也没有在您的配置中包含发布。

请先关注文档: https :

@kamilogorek

在 SDK 中,在我们发送事件之前,我们会将此信息记录为处理堆栈跟踪的一部分。 该错误来自服务器也试图填写该信息。
不过,这对我们来说是一个错误,因为我们实际上并不希望您在每个版本中都上传 node_modules

如果我当时理解
我认为剩下的唯一问题是尽管正确提供了上下文,但仍显示错误。 服务器似乎没有认识到它不需要我这边的额外上传。 (我说对

@guischdi它正在寻找的文件来自您的应用程序,而不是来自 node_modules,因此我所做的更改(为了更成功地排除第 3 方代码)不适用于此处。

我们尝试为节点应用程序处理源映射的原因是,虽然代码很可能没有被缩小,但它可以很容易地被转译(例如,如果它是用打字稿编写的),所以我们需要源映射以显示编写的代码而不是 babel 的输出。

好的,所以这对我来说看起来像是一个 UX 错误。 在我看来,它应该(至少对于 Node.js 项目)只是一个警告,它不能说Source code was not found而是像Source maps were not found 。 这样可以防止出现超过一年历史的问题;)
如果您愿意,您可以将此问题作为报告重新提交给在前端/显示部分工作的任何人,或者将其关闭并向他们报告此误解。 非常感谢您终于澄清了这一点!

此页面是否有帮助?
0 / 5 - 0 等级