×
뎁스노트
로그인
홈
언어
프레임워크
개발도구
네크워크와 서버
데이터베이스
프로젝트 관리
데이터 사이언스
이야기
사진
모집 · 홍보
무린의 블로그
무린의 블로그
로그인
회원가입
글쓰기
글 올리기
개발 노트, 이야기를 작성해보세요.
질문하기
부담없이 무엇이든 질문하세요.
사진 올리기
사진을 올려보세요.
Kotlin
코틀린 코루틴 디버깅 시 'was Optimised Out(최적화로 제거됨)' 메시지 해결하기
무린
23일 전
팔로우
팔로잉
코틀린으로 비동기 프로그래밍을 하다 보면, 코루틴의 일시 중단 지점에서 변수 값을 확인하려 할 때 디버거에서 '최적화로 제거됨(was optimised out)'이라는 메시지를 접하게 되는 경우가 있습니다. 이는 코루틴이 상태 기계(state machine)로 컴파일되면서, 일시 중단 지점 이후에 필요하지 않은 변수들은 성능 최적화를 위해 제거되기 때문입니다.
이러한 상황은 디버깅을 어렵게 만들 수 있어서 당혹스러울 수 있는데요, 빌드 설정을 조정하여 디버깅 시에만 이러한 변수를 유지하도록 설정하는 방법을 알아보겠습니다. 이를 통해 IntelliJ IDEA나 Android Studio에서 코루틴을 디버깅할 때 변수 값을 확인할 수 있으며, 프로덕션 성능에는 영향을 주지 않습니다. **왜 변수들이 '최적화로 제거됨' 상태가 되는가?** --- 코틀린 코루틴은 컴파일 시 상태 기계로 변환됩니다. 이 과정에서 일시 중단(suspend) 지점 이후에 사용되지 않는 변수들은 메모리 사용을 줄이기 위해 제거됩니다. 또한, `inline` 함수로 표시된 코루틴 함수는 컴파일러가 코드 최적화를 위해 불필요한 변수를 제거할 수 있습니다. 이러한 최적화는 성능 향상에는 도움이 되지만, 디버깅 시에는 변수 값을 확인하지 못하게 만드는 원인이 됩니다. **'최적화로 제거됨' 변수를 다시 보이게 만드는 방법** --- 디버깅 시에만 코루틴의 변수를 유지하도록 빌드 설정을 동적으로 변경할 수 있습니다. 이를 위해 `idea.active` 속성을 활용하여, IntelliJ IDEA나 Android Studio에서 작업할 때만 디버그 친화적인 설정을 적용할 수 있습니다. **1\. 코루틴 디버깅 동적 활성화** `build.gradle.kts` 파일에서 다음과 같이 설정합니다. ```kotlin // Kotlin Multiplatform kotlin { compilerOptions { if (System.getProperty("idea.active") == "true") { println("Enable coroutine debugging") freeCompilerArgs = listOf("-Xdebug") } } } // Kotlin JVM kotlin { compilerOptions { if (System.getProperty("idea.active") == "true") { println("Enable coroutine debugging") freeCompilerArgs.add("-Xdebug") } } } ``` **2\. 설정의 작동 원리** * `System.getProperty("idea.active")`: 이 시스템 속성은 프로젝트가 IntelliJ IDEA나 Android Studio에서 열릴 때 자동으로 `true`로 설정됩니다. 이를 통해 IDE에서 작업할 때만 디버그 관련 설정을 적용할 수 있습니다. * `-Xdebug`: 이 컴파일러 인자는 디버그 친화적인 바이트코드를 생성하여, 디버깅 시 코루틴 변수에 대한 정보를 더 많이 유지합니다. **3. `idea.active` 사용의 장점** * **성능 저하 방지**: `-Xdebug`와 같은 디버그 옵션은 애플리케이션의 성능을 저하시킬 수 있습니다. 이를 IDE에서 작업할 때만 활성화하여 프로덕션 빌드에는 영향을 주지 않도록 합니다. * **작업 흐름 간소화**: IntelliJ IDEA나 Android Studio에서 디버그 설정을 자동으로 활성화하여, 개발 중에 설정을 수동으로 변경하는 번거로움을 줄입니다. * **안전한 설정 관리**: 이 방법을 통해 빌드 스크립트를 깔끔하게 유지하면서, 필요한 경우에만 디버그 플래그를 적용할 수 있습니다. **마치며** --- 코틀린 코루틴을 디버깅할 때 '최적화로 제거됨' 메시지로 인해 변수 값을 확인하지 못하는 문제는 위와 같은 빌드 설정 조정을 통해 해결할 수 있습니다. 이를 통해 디버깅 효율성을 높이고, 프로덕션 성능에는 영향을 주지 않도록 설정할 수 있습니다. *** *출처: [Debugging Kotlin Coroutines: Making “Optimised Out” Variables Visible](https://tomsabel.com/debugging-kotlin-coroutines-making-optimised-out-variables-visible-de1cecc0d59e)*
optimised_out
coroutine
kotlin
Xdebug
idea.active
0
0
0
114
신고하기
사용자 차단하기
무린
23일 전
팔로우
팔로잉
댓글
0
올리기
답변 작성
답변 모드로 쓰기
이미지 첨부
올리기
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)
0
0
0
신고하기
사용자 차단하기
아직 댓글이 없습니다. 첫번째 댓글 작성자가 되어주세요 :)