Skip to content

Commit d9ed330

Browse files
committed
Listen to thread start/stop events from the vm
1 parent 8f2ef81 commit d9ed330

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

adapter/src/main/kotlin/org/javacs/ktda/core/event/DebuggeeEventBus.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ interface DebuggeeEventBus {
66
val exitListeners: ListenerList<ExitEvent>
77
val breakpointListeners: ListenerList<BreakpointStopEvent>
88
val stepListeners: ListenerList<StepStopEvent>
9-
var exceptionListeners: ListenerList<ExceptionStopEvent>
9+
val exceptionListeners: ListenerList<ExceptionStopEvent>
10+
val threadListeners: ListenerList<ThreadEvent>
1011
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package org.javacs.ktda.core.event
2+
3+
object ThreadEvent

adapter/src/main/kotlin/org/javacs/ktda/jdi/JDIDebuggee.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.javacs.ktda.core.Position
77
import org.javacs.ktda.core.Source
88
import org.javacs.ktda.core.launch.LaunchConfiguration
99
import org.javacs.ktda.core.event.DebuggeeEventBus
10+
import org.javacs.ktda.core.event.ThreadEvent
1011
import org.javacs.ktda.core.breakpoint.Breakpoint
1112
import org.javacs.ktda.core.breakpoint.ExceptionBreakpoint
1213
import org.javacs.kt.LOG
@@ -49,7 +50,7 @@ class JDIDebuggee(
4950

5051
LOG.trace("Updating threads")
5152
updateThreads()
52-
53+
5354
LOG.trace("Updating breakpoints")
5455
hookBreakpoints()
5556
}

adapter/src/main/kotlin/org/javacs/ktda/jdi/event/VMEventBus.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,19 @@ import org.javacs.ktda.core.event.ExitEvent
99
import org.javacs.ktda.core.event.BreakpointStopEvent
1010
import org.javacs.ktda.core.event.ExceptionStopEvent
1111
import org.javacs.ktda.core.event.StepStopEvent
12+
import org.javacs.ktda.core.event.ThreadEvent
1213
import org.javacs.ktda.jdi.exception.JDIException
1314
import com.sun.jdi.VirtualMachine
1415
import com.sun.jdi.VMDisconnectedException
1516
import com.sun.jdi.event.VMDeathEvent
1617
import com.sun.jdi.event.Event as JDIEvent
1718
import com.sun.jdi.event.LocatableEvent as JDILocatableEvent
1819
import com.sun.jdi.event.EventSet as JDIEventSet
20+
import com.sun.jdi.event.BreakpointEvent as JDIBreakpointEvent
1921
import com.sun.jdi.event.StepEvent as JDIStepEvent
2022
import com.sun.jdi.event.ExceptionEvent as JDIExceptionEvent
23+
import com.sun.jdi.event.ThreadStartEvent as JDIThreadStartEvent
24+
import com.sun.jdi.event.ThreadDeathEvent as JDIThreadDeathEvent
2125
import java.util.concurrent.ConcurrentHashMap
2226
import kotlin.reflect.KClass
2327

@@ -31,7 +35,8 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
3135
override val exitListeners = ListenerList<ExitEvent>()
3236
override val breakpointListeners = ListenerList<BreakpointStopEvent>()
3337
override val stepListeners = ListenerList<StepStopEvent>()
34-
override var exceptionListeners = ListenerList<ExceptionStopEvent>()
38+
override val exceptionListeners = ListenerList<ExceptionStopEvent>()
39+
override val threadListeners = ListenerList<ThreadEvent>()
3540

3641
init {
3742
startAsyncPoller()
@@ -71,7 +76,7 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
7176
}
7277

7378
private fun hookListeners() {
74-
subscribe(com.sun.jdi.event.BreakpointEvent::class) {
79+
subscribe(JDIBreakpointEvent::class) {
7580
breakpointListeners.fire(BreakpointStopEvent(
7681
threadID = toThreadID(it.jdiEvent)
7782
))
@@ -90,6 +95,12 @@ class VMEventBus(private val vm: VirtualMachine): DebuggeeEventBus {
9095
))
9196
it.resumeThreads = false
9297
}
98+
subscribe(JDIThreadStartEvent::class) {
99+
threadListeners.fire(ThreadEvent)
100+
}
101+
subscribe(JDIThreadDeathEvent::class) {
102+
threadListeners.fire(ThreadEvent)
103+
}
93104
}
94105

95106
private fun toThreadID(event: JDILocatableEvent) = event.thread().uniqueID()

0 commit comments

Comments
 (0)