如何拦截Kotlin协程?

问题描述

我正在尝试检测Kotlin协程,类似于使用Javaagent here完成的操作。我不需要Javaagent。

第一步是拦截DebugProbes中定义的协程的创建,暂停和恢复。的代码如下:

request.user.is_authenticated

junit5测试触发拦截

AnonymousUser

但是,不会发生拦截(通过没有日志语句和使用调试器来确认)。我是Byte Buddy的新手,所以有可能我错过了一些东西。有什么想法吗?

Kotlin v1.4.10,Kotlin Coroutines v1.3.9,Byte Buddy v1.10.17。

解决方法

您确定此时尚未加载该类吗?尝试在ClassInjector.UsingReflection中设置一个断点,以查看您是否通过手动操作或由于先前加载的类而中止注射。

更干净的解决方案是Java代理。您可以使用 byte-buddy-agent 通过ByteBuddyAgent.install()动态创建一个,然后在其上注册AgentBuilder

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...