Chào mừng độc giả Cafedev! Trong hướng dẫn mới nhất của chúng tôi, chúng tôi sẽ cùng nhau khám phá Kotlin với Debug Kotlin Flow sử dụng IntelliJ IDEA. Tại Cafedev, chúng tôi không chỉ chia sẻ kiến thức sâu rộng về lập trình mà còn hướng dẫn cách tối ưu hóa trải nghiệm debug trong quá trình phát triển. Đồng hành với chúng tôi để khám phá cách sử dụng công cụ mạnh mẽ này và tận hưởng sự linh hoạt của Kotlin trong việc xây dựng ứng dụng hiện đại và đáng tin cậy.”

Hướng dẫn này hướng dẫn cách tạo Kotlin Flow và debug nó bằng IntelliJ IDEA.
Hướng dẫn giả định bạn đã có kiến thức trước về các khái niệm coroutinesKotlin Flow.

1. Tạo một Kotlin flow

Tạo một flow Kotlin với bộ phát và bộ thu chậm:
1. Mở dự án Kotlin trong IntelliJ IDEA. Nếu bạn chưa có dự án, hãy tạo một cái.

2. Đối với dự án Gradle, thêm dependency sau vào build.gradle(.kts) để sử dụng thư viện kotlinx.coroutines:

Kotlin:

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

Groovy:

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3'
}




Đối với hệ thống xây dựng khác, xem hướng dẫn trong kotlinx.coroutines README.


3. Mở file Main.kt trong src/main/kotlin.
Thư mục src chứa các tệp nguồn và tài nguyên Kotlin. Tệp Main.kt chứa mã mẫu sẽ in ra Hello World!.


4. Tạo hàm simple() trả về một flow gồm ba số:

  • Sử dụng hàm delay() để mô phỏng mã chặn tiêu thụ CPU. Nó tạm ngưng coroutine trong 100 ms mà không chặn luồng.
  • Sản xuất giá trị trong vòng lặp for sử dụng hàm emit().
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
import kotlin.system.*

fun simple(): Flow<Int> = flow {
    for (i in 1..3) {
        delay(100)
        emit(i)
    }
}


5. Thay đổi mã trong hàm main():

fun main() = runBlocking {
    simple()
        .collect { value ->
            delay(300)
            println(value)
        }
}


6. Xây dựng mã bằng cách nhấp vào Build Project

2. Debug coroutine

1.Đặt một breakpoint tại dòng gọi hàm emit():

2.Chạy mã trong chế độ debug bằng cách nhấp Debug bên cạnh cấu hình chạy ở đầu trang màn hình.
Xây dựng ứng dụng console


Cửa sổ công cụ Debug xuất hiện:

  • Tab Frames chứa ngăn xếp cuộc gọi.
  • Tab Variables chứa biến trong ngữ cảnh hiện tại. Nó cho biết rằng flow đang phát ra giá trị đầu tiên.
  • Tab Coroutines* chứa thông tin về coroutines đang chạy hoặc tạm ngừng.

3.Tiếp tục phiên đợi bằng cách nhấp Tiếp tục Chương trình trong cửa sổ công cụ Debug. Chương trình sẽ dừng tại điểm breakpoint hiện tại.

Bây giờ flow phát ra giá trị thứ hai.

Biến đã được tối ưu hóa

Nếu bạn sử dụng hàm suspend, trong bộ gỡ lỗi, bạn có thể thấy văn bản “was optimized out” bên cạnh tên biến:


Văn bản này có nghĩa là tuổi thọ biến đã giảm, và biến không còn tồn tại nữa. Gỡ lỗi mã nguồn với biến được tối ưu hóa là khó khăn vì bạn không thấy giá trị của chúng. Bạn có thể tắt hành vi này với tùy chọn trình biên dịch -Xdebug.

Không bao giờ sử dụng cờ này trong sản xuất: -Xdebug có thể gây rò rỉ bộ nhớ.

3. Thêm một coroutine chạy đồng thời

  1. Mở file Main.kt trong src/main/kotlin.
  2. Cải thiện mã để chạy bộ phát và bộ thu đồng thời:
  3. Thêm gọi hàm buffer() để chạy bộ phát và bộ thu đồng thời. buffer() lưu trữ các giá trị được phát và chạy bộ thu flow trong một coroutine riêng biệt.
fun main() = runBlocking<Unit> {
    simple()
        .buffer()
        .collect { value ->
            delay(300)
            println(value)
        }
}
  1. Xây dựng mã bằng cách nhấp vào Build Project.

4. Debug một Kotlin flow với hai coroutines

1.Đặt một breakpoint mới tại println(value).

2.Chạy mã trong chế độ debug bằng cách nhấp Debug bên cạnh cấu hình chạy ở đầu trang màn hình.

Cửa sổ công cụ Debug xuất hiện.


Trong tab Coroutines, bạn có thể thấy có hai coroutines đang chạy đồng thời. Bộ thu và bộ phát flow chạy trong các coroutine riêng biệt nhờ vào hàm buffer(). Hàm buffer() đệm giá trị được phát từ flow. Coroutine của bộ phát có trạng thái RUNNING, và coroutine của bộ thu có trạng thái SUSPENDED.

3. Tiếp tục phiên đợi bằng cách nhấp Tiếp tục Chương trình trong cửa sổ công cụ Debug.

Bây giờ coroutine của bộ thu có trạng thái RUNNING, trong khi coroutine của bộ phát có trạng thái SUSPENDED.


Bạn có thể đào sâu vào mỗi coroutine để gỡ lỗi mã nguồn của mình.

Cảm ơn bạn đã đọc hướng dẫn Kotlin with Debug Kotlin Flow sử dụng IntelliJ IDEA tại Cafedev. Chúng tôi hy vọng rằng bài viết này đã mang lại cho bạn kiến thức mới và giúp tối ưu hóa quá trình phát triển ứng dụng của bạn. Tại Cafedev, chúng tôi cam kết tiếp tục chia sẻ những kiến thức, kỹ thuật mới và hướng dẫn sử dụng công cụ hiện đại để hỗ trợ cộng đồng lập trình. Hãy tiếp tục đồng hành với chúng tôi để nhận được nhiều thông tin hữu ích và cập nhật từ thế giới công nghệ. Hẹn gặp lại bạn trong những chia sẻ tiếp theo trên Cafedev!

Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của Cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!