Могу ли я получить трассировку стека исключений в kotlin-js? - PullRequest
0 голосов
/ 23 июня 2019

Я писал простой веб-интерфейс для приложения с kotlin-js и столкнулся с проблемой обработки исключений. Как я вижу, нет 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 не является стандартным свойством исключения, но является обычным для современных браузеров.

1 Ответ

0 голосов
/ 11 июля 2019

Просто измените console.log на console.error

import kotlin.browser.window

fun main() {
    window.onload = {
        try {
            throw RuntimeException()
        } catch (e: Throwable) {
            console.error(e) // change here
            throw e
        }
    }
}
...