Ir al contenido principal
Versión: 5.3.x

Depuración de Corrutinas

[Traducción Beta No Oficial]

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

kotlinx-coroutines-debug es un módulo que proporciona capacidades de depuración para corrutinas en la JVM. Cuando está activado, un agente de depuración se instala mediante ByteBuddy y captura información sobre las corrutinas a medida que se crean, inician, suspenden y reanudan.

Kotest permite activar la depuración por prueba. Esto se consigue habilitando coroutineDebugProbes en la configuración de la prueba.

Una vez activada, cualquier corrutina lanzada dentro de la prueba se incluirá en un "volcado de corrutinas" después de que esta finalice, o inmediatamente después de que se lance una excepción.

class CoroutineDebugging : FunSpec() {
init {
test("foo").config(coroutineDebugProbes = true) {
someMethodThatLaunchesACoroutine() // launches a new coroutine
}
}
}

El volcado de corrutinas tendrá un aspecto similar a:

Coroutines dump 2021/11/27 22:17:43

Coroutine DeferredCoroutine{Active}@71f1906, state: CREATED
(Coroutine creation stacktrace)
at kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt.createCoroutineUnintercepted(IntrinsicsJvm.kt:122)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:30)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.async$default(Builders.common.kt:82)
at kotlinx.coroutines.BuildersKt.async$default(Unknown Source)
at com.sksamuel.kotest.engine.coroutines.Wibble$1.invokeSuspend(CoroutineDebugTest.kt:37)
at com.sksamuel.kotest.engine.coroutines.Wibble$1.invoke(CoroutineDebugTest.kt)

Configuración a nivel de Spec

La depuración de corrutinas puede activarse para todas las pruebas de un spec sobrescribiendo el ajuste coroutineDebugProbes dentro del spec:

class CoroutineDebugging : FunSpec() {
init {

coroutineDebugProbes = true

test("foo") {
// debugging enabled here
}

test("bar") {
// debugging enabled here
}

}
}

Configuración para todo el proyecto

La depuración de corrutinas puede activarse para todas las pruebas de un proyecto mediante ProjectConfig:

class ProjectConfig : AbstractProjectConfig() {
override val coroutineDebugProbes = true
}