如何获得修复此错误的 Stacktrace?

Posted

技术标签:

【中文标题】如何获得修复此错误的 Stacktrace?【英文标题】:How can I get the Stacktrace of this error of fix it? 【发布时间】:2021-03-10 13:38:19 【问题描述】:

嘿,我尝试在 Kotlin Hands 上使用 Ktor。但是使用“/”访问网页时出现问题。

        embeddedServer(Netty, port) 
            install(FreeMarker) 
                templateLoader = ClassTemplateLoader(this::class.java.classLoader, "templates")
                outputFormat = htmlOutputFormat.INSTANCE
            
            routing 
                static("/static") 
                    resources("files")
                
                get("/") 
                    call.respond(FreeMarkerContent("index.ftl", mapOf("entries" to blogEntries), ""))
                
            
        .start(wait = false)

我使用的是我的代码。我找不到错误,控制台中只有这条消息:

[eventLoopGroupProxy-4-1] INFO ktor.application - Unhandled: GET - /, io failed

有没有人知道我该如何解决这个错误?

【问题讨论】:

我不知道这个库,但看起来它在内部处理了异常。该消息是一个非常标准的日志记录消息,如果您为项目配置了某种记录器,您可能会在那里找到堆栈跟踪。否则请查看图书馆的页面以获得社区支持,这可能是一个常见问题。 【参考方案1】:

生成该消息的确切行在io.ktor.server.engine.logFailure:https://github.com/ktorio/ktor/blob/2e1b0046e4235865da7cbbfbf2e887f410775278/ktor-server/ktor-server-host-common/jvm/src/io/ktor/server/engine/DefaultEnginePipeline.kt#L107

private fun ApplicationEnvironment.logFailure(call: ApplicationCall, cause: Throwable) 
   ...
            is IOException -> log.info("$status: $logString, io failed: $cause.message ?: "unknown error"")
   ...

在这一行添加一个断点。然后当您的应用程序失败时,cause 将包含真正的异常。

就我而言,这是 FreeMarker 模板中的错误。这很奇怪,因为通常这些异常会正常打印。这次它只打印了Unhandled: <route>, io failed

这似乎是 Ktor 中的一个错误:这些异常是在正常行为中抛出的,并且频繁到您不想要完整的堆栈跟踪。但有时(如本例)异常是不正常的,您确实需要堆栈跟踪。

【讨论】:

【参考方案2】:

我建议使用CallLogging 功能和routes tracing 来解决您的问题。

【讨论】:

以上是关于如何获得修复此错误的 Stacktrace?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Dart中获取当前的堆栈跟踪以获得Completer.CompleteException(exception,stackTrace);

在GWT 2.7中使用SuperDevMode时如何获得完整的StackTrace?

如何解决“无法获得'adb version'的结果”?

如何修复缺少的 API-MS-ONECOREUAP-SETTINGSYNC-STATUS-L1-1-0.DLL?

如何在 vb.net 中使用 Stacktrace 返回错误行号

如何修复查询以获得错误的答案