본문 바로가기
Kotlin

[Kotlin] Kotlin 공식 문서 번역 - IntelliJ IDEA에서 코루틴 디버그하기 (Debug coroutines using IntelliJ IDEA – tutorial)

by 노력남자 2023. 10. 2.
반응형

IntelliJ IDEA에서 코루틴 디버그하기 (Debug coroutines using IntelliJ IDEA – tutorial)

 

이 튜토리얼은 Kotlin 코루틴을 생성하고 IntelliJ IDEA를 사용하여 디버그하는 방법을 보여줍니다.

이 튜토리얼은 코루틴 개념에 대한 사전 지식이 있다고 가정합니다.


코루틴 생성하기


1. IntelliJ IDEA에서 Kotlin 프로젝트를 열어보세요. 프로젝트가 없다면 새로 만드세요.

2. Gradle 프로젝트에서 kotlinx.coroutines 라이브러리를 사용하려면 build.gradle(.kts)에 다음 종속성을 추가하세요:

 

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
}


다른 빌드 시스템의 경우 kotlinx.coroutines README의 지침을 참조하세요.

3. src/main/kotlin에 있는 Main.kt 파일을 열어보세요.

src 디렉토리에는 Kotlin 소스 파일과 리소스가 포함되어 있습니다. Main.kt 파일에는 "Hello World!"를 출력하는 샘플 코드가 포함되어 있습니다.

4. main() 함수에서 코드를 변경하세요:

코루틴을 래핑하기 위해 runBlocking() 블록을 사용하세요.

async() 함수를 사용하여 값을 계산하는 코루틴을 생성하세요.

await() 함수를 사용하여 계산 결과를 기다리세요.

println() 함수를 사용하여 계산 상태와 곱셈 결과를 출력하세요.

import kotlinx.coroutines.*

fun main() = runBlocking<Unit> {
    val a = async {
        println("일부 답을 계산 중입니다")
        6
    }
    val b = async {
        println("다른 일부 답을 계산 중입니다")
        7
    }
    println("답은 ${a.await() * b.await()}")
}


5. Build Project를 클릭하여 코드를 빌드하세요.

 


코루틴 디버깅하기


1. println() 함수 호출 라인에 중단점을 설정하세요:

 


2. 화면 상단의 실행 구성 옆에 있는 Debug를 클릭하여 디버그 모드로 코드를 실행하세요.

 


디버그 도구 창이 나타납니다:

- Frames 탭에는 호출 스택이 포함되어 있습니다.

-  Variables 탭에는 현재 컨텍스트의 변수가 포함되어 있습니다.

-  Coroutines 탭에는 실행 중인 또는 중단된 코루틴에 대한 정보가 포함되어 있습니다. 세 개의 코루틴이 있음을 보여주며, 첫 번째 코루틴은 RUNNING 상태이고 나머지 두 개는 CREATED 상태입니다.

 


3. 디버그 도구 창에서 Resume Program을 클릭하여 디버거 세션을 다시 시작하세요:

 


이제 Coroutines 탭에는 다음이 표시됩니다:

- 첫 번째 코루틴은 SUSPENDED 상태이며 값들을 기다리고 있습니다.

-  두 번째 코루틴은 a 값을 계산 중이며 RUNNING 상태입니다.

-  세 번째 코루틴은 CREATED 상태이며 b 값을 계산하지 않습니다.

4. 디버그 도구 창에서 Resume Program을 클릭하여 디버거 세션을 다시 시작하세요:

 


이제 Coroutines 탭에는 다음이 표시됩니다:

- 첫 번째 코루틴은 SUSPENDED 상태이며 값들을 기다리고 있습니다.

-  두 번째 코루틴은 값을 계산하고 사라졌습니다.

-  세 번째 코루틴은 b 값을 계산 중이며 RUNNING 상태입니다.

IntelliJ IDEA 디버거를 사용하여 각 코루틴을 더 자세히 살펴볼 수 있습니다.


최적화된 변수


디버거에서 suspend 함수를 사용하는 경우 변수 이름 옆에 "was optimized out" 텍스트를 볼 수 있습니다:

 


이 텍스트는 변수의 수명이 감소하고 변수가 더 이상 존재하지 않음을 의미합니다. 최적화된 변수로 코드를 디버깅하는 것은 어렵기 때문에 -Xdebug 컴파일러 옵션을 사용하여 이 동작을 비활성화할 수 있습니다.

 

원문

 

https://kotlinlang.org/docs/debug-coroutines-with-idea.html

반응형

댓글