javascript - 我可以在 kotlin-js 中获取异常堆栈跟踪吗?

标签 javascript exception stack-trace kotlin-js

我一直在使用 kotlin-js 为应用程序编写简单的 Web 前端,并面临异常处理的问题。 正如我所看到的,没有 API 可以获取异常堆栈跟踪:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-throwable/index.html 是这样吗? 如果是,可能有人知道一些库或片段来从 Throwable 对象中获取堆栈跟踪?

目前,我有一些解决方法:

import kotlin.browser.window

fun main() {
    window.onload = {
        try {
            throw RuntimeException()
        } catch (e: Throwable) {
            console.log(e)
            throw e
        }
    }
}

控制台输出为:

Object { 
"message_8yp7un$_0": null, 
"cause_th0jdv$_0": null, 
"stack": "captureStack@http://localhost:9080/js/kotlin.js:1767:27\nException@http://localhost:9080/js/kotlin.js:3244:14\nRuntimeException@http://localhost:9080/js/kotlin.js:3255:17\nRuntimeException_init@http://localhost:9080/js/kotlin.js:3261:24\nmain$lambda@http://localhost:9080/js/web-client.js:34:13\n",
"name": "RuntimeException"
}

这里,console.log(Throwable)公开了底层的JavaScript对象属性,并且有一个stack,但它指向JavaScript代码,如果没有它就很难使用源映射回 kotlin。

UPD:看起来stack不是标准异常属性,而是现代浏览器的常见属性。

最佳答案

自 Kotlin 1.4 起,stdlib 包含两个用于此目的的扩展 有趣的 Throwable.stackTraceToString()
有趣的 Throwable.printStackTrace()

使用这些我们可以编写

    window.onload = {
        try {
            throw RuntimeException()
        } catch (e: Throwable) {
            e.printStackTrace()
        }
    }

关于javascript - 我可以在 kotlin-js 中获取异常堆栈跟踪吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722551/

相关文章:

c++ - 输出函数调用到日志文件

javascript - FadeIn 和 FadeOut 跳转页面

Java - 意外的 ZipException(意外的错误类型)

C#:stacktrace 上的行号指向与 } 一致的行

java - 用于计算日志文件中堆栈跟踪的工具

python - 识别当前正在执行哪个函数调用

javascript - 关于此向导表单布局的一般方式的建议

javascript - 无法从 Mongoose-Node 检索对象

javascript - 如何使用 Ember-CLI 导入模块 ember-localstorage-adapter?

java - 为什么不抛出异常?