首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala.js堆栈迹

Scala.js堆栈迹
EN

Stack Overflow用户
提问于 2017-09-07 18:34:52
回答 1查看 465关注 0票数 6

当我的Scala.js代码抛出异常时,无法理解的堆栈跟踪使我感到沮丧。我以为我有一个使用Javascript库(参见Getting a scala stacktrace)的解决方案,但它经常中断。

如何从如下的堆栈跟踪中提取含义(程序崩溃的地方;它是如何到达那里的--以Scala代码的形式)。或者我是不是做错了什么来得到未经翻译的堆栈跟踪?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 15:38:54

看看我在youi框架中写了一段时间的代码:https://github.com/outr/youi/tree/e66dc36a12780fa8941152d07de9c3a52d28fc10/app/js/src/main/scala/io/youi/app/sourceMap

它用于将JS堆栈跟踪反转为Scala堆栈跟踪。在youi中,我将错误发送到服务器,这样我就可以监视在完整的回溯过程中出现的浏览器错误。

概述

  1. source-map.js

您需要源代码map.js来解析Scala.js在编译代码时生成的Scala.js文件。请参阅:https://github.com/mozilla/source-map

  1. 通过Ajax加载js.map文件

SourceMapConsumer需要js.map文件的js.Object (JSON)。有关通过youi的Ajax特性加载的示例,请参阅https://github.com/outr/youi/blob/e66dc36a12780fa8941152d07de9c3a52d28fc10/app/js/src/main/scala/io/youi/app/sourceMap/ErrorTrace.scala#L58

  1. 处理Throwable

跟踪表示JS文件中的行和列,您可以将该信息传递给SourceMapConsumer以获取原始Scala行号(参见SourceMapConsumer.originalPositionFor)。有关迭代该ErrorTrace.toCause的跟踪元素的示例,请参见https://github.com/outr/youi/blob/e66dc36a12780fa8941152d07de9c3a52d28fc10/app/js/src/main/scala/io/youi/app/sourceMap/ErrorTrace.scala#L98

  1. 处理错误

现在您已经具备了处理JavaScript错误并将它们转换回Scala跟踪的能力,您需要实际接收这些错误。如果要全局处理未捕获错误,请将函数设置为window.onerror以捕获错误。在本文撰写之时,Scala.js中的函数签名对于处理所有信息并不理想,因此在youi中,我使用js.Dynamic将其设置为我需要的(参见:https://github.com/outr/youi/blob/e66dc36a12780fa8941152d07de9c3a52d28fc10/app/js/src/main/scala/io/youi/app/ClientApplication.scala#L35)。另外,请注意,在ErrorTrace中,它支持多个传入类型的错误(ErrorEventThrowable和更一般的场景)。这是因为在JavaScript中,基于正在发生的事情,错误以不同的方式出现。这是一个相当复杂的话题,以及为什么我在youi中创建了这个功能来简化事情。

没有我想要的那么简单的概述,但这不是一个简单的问题解决。源代码映射GitHub项目(https://github.com/mozilla/source-map)有很好的文档,这是我最初用来编写解决方案的方法(添加了一些尝试和错误)。如果我提供的信息是不完整的,我建议阅读更多,因为它应该提供大多数信息,并可能更好地解释。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46103006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档