Coroutine Stacks — плагин для отладки корутин Kotlin

от автора

Всем привет!

В рамках программы Google Summer of Code 2023 мы с моим студентом разработали плагин для Intellij IDEA, который является аналогом Parallel Stacks из Visual Studio, CLion и Rider для Kotlin coroutines. Плагин анализирует стек трейсы каждой корутины в приложении и строит граф, объединяя общие наборы стек фреймов в вершины. Таким образом, во время отладки вашего приложения вы можете проанализировать
потоки выполнения всех корутин в вашей программе.

Пример работы плагина

Чтобы понять, как плагин работает, рассмотрим следующий пример:

import kotlinx.coroutines.*  fun main() = runBlocking<Unit> {     launch {         withContext(Dispatchers.Default) {             println()             delay(1000)         }     }      launch {         withContext(Dispatchers.Default) {             println() // Поставьте брейкпоинт здесь!             delay(1000)         }     } }

Остановившись на брейкпоинте и открыв панель Coroutine Stacks, вы увидите следующий граф:

Внимательно взглянув на него, становится ясно, что в приложении есть 2 корутины. Обе они начинают свое выполнение с функции run класса CoroutineScheduler$Worker, но после функции runSafely их потоки выполнения разделяются. Стек трейс корутины, в которой был поставлен брейкпоинт, обведен синим цветом. Ее исполнение приостановлено на функции invokeSuspend и на данный момент находится на 13 строчке файла Main.kt. Вторая корутина приостановлена на функции newLine, которая была вызвана в ходе исполнения println.

Стек фреймы, которые являются библиотечными, выделены желтым цветом. Их можно отключить, нажав кнопку фильтр в левом верхнем углу панели:

Все корутины группируются по их диспатчеру, который можно выбрать нажав на drop down list в верху панели. Вы также можете кликать на стек фреймы, чтобы открыть соответствующий файл и строчку, где функция была вызвана. С полным описанием функционала плагина можно ознакомиться здесь.

Заключение

Плагин выложен в JetBrains Marketplace и его можно установить из меню Plugins в Intellij IDEA. Исходный код плагина открыт и выложен на гитхаб. Если вы столкнетесь с багами или у вас есть идея как плагин можно улучшить, обязательно откройте issue в нашем трекере!


ссылка на оригинал статьи https://habr.com/ru/articles/784898/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *