我在 Kotlin 中制作了一个事件系统,可以在其中监听和广播事件,类似于 C# 中事件的工作方式。
要广播事件,我有以下行:
playerConnected.broadcast(player)
这里playerConnected
是事件并且 player
是上下文对象。
在 IntellIJ 中调试时,当“单步执行”广播函数以查看事件监听器执行的操作时,它会单步执行 broadcast()
函数,这是有道理的,它看起来像这样:
fun broadcast(args: T) {
for (listener in listeners) {
try {
listener.accept(args)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
我有兴趣跳过进入 broadcast()
而是直接进入每个 accept()
函数,其中 listener
是 Consumer<T>
.
在 C# 中,我可以通过添加 DebuggerStepThroughAttribute
来解决这个问题到broadcast()
功能。
Kotlin 中是否有任何等效属性或 IntelliJ 中实现相同功能的其他方法?
最佳答案
如果您的目标是 JVM,并且broadcast
是类的方法,则可以将调试器设置为忽略整个类。
转到 IntelliJ IDEA 的设置、构建、执行、部署 > 调试器 > 单步执行。
在“Java”部分,您可以添加一个您希望它忽略的类:
点击“+”按钮后,您可以搜索broadcast
所在的类。添加该类后,整个类将被忽略。
如果您不希望它忽略整个类,这里有一个可能有效的“技巧”。将broadcast
重写为扩展函数在单独的文件中。假设您的文件名为 Foo.kt
。这实际上会转换为一个名为 FooKt
的 Java 类,当您在“要忽略的类列表”对话框中搜索它时,它就会显示出来。当然,并不是所有的方法都可以重写为扩展函数,并且将它们重写为扩展函数并不总是有意义,所以这并不总是有效:(
关于c# - Kotlin 中是否有相当于 C# 的 DebuggerStepThrough 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66611602/