(CoroutineDebugger) Minor fixes, kotlinx.coroutines version fix
This commit is contained in:
-15
@@ -211,21 +211,6 @@ abstract class AbstractKotlinEvaluateExpressionTest : KotlinDescriptorTestCaseWi
|
||||
super.expandAll(tree, runnable, HashSet(), filter, suspendContext)
|
||||
}
|
||||
|
||||
private fun SuspendContextImpl.runActionInSuspendCommand(action: SuspendContextImpl.() -> Unit) {
|
||||
if (myInProgress) {
|
||||
action()
|
||||
} else {
|
||||
val command = object : SuspendContextCommandImpl(this) {
|
||||
override fun contextAction(suspendContext: SuspendContextImpl) {
|
||||
action(suspendContext)
|
||||
}
|
||||
}
|
||||
|
||||
// Try to execute the action inside a command if we aren't already inside it.
|
||||
debuggerSession.process.managerThread?.invoke(command) ?: command.contextAction(this)
|
||||
}
|
||||
}
|
||||
|
||||
private fun mayThrow(collector: MutableMap<String, Throwable>, expression: String, f: () -> Unit) {
|
||||
try {
|
||||
f()
|
||||
|
||||
+28
-23
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.debugger.test
|
||||
import com.intellij.debugger.engine.AsyncStackTraceProvider
|
||||
import com.intellij.debugger.engine.JavaStackFrame
|
||||
import com.intellij.debugger.engine.SuspendContextImpl
|
||||
import com.intellij.debugger.memory.utils.StackFrameItem
|
||||
import com.intellij.execution.configurations.JavaParameters
|
||||
import com.intellij.execution.process.ProcessOutputTypes
|
||||
import com.intellij.jarRepository.JarRepositoryManager
|
||||
@@ -25,8 +24,7 @@ import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.CoroutineAsyncStackTraceProvider
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.PreflightProvider
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.data.CreationCoroutineStackFrameItem
|
||||
import org.jetbrains.kotlin.idea.debugger.coroutine.util.format
|
||||
import org.jetbrains.kotlin.idea.debugger.invokeInManagerThread
|
||||
import org.jetbrains.kotlin.idea.debugger.invokeInSuspendManagerThread
|
||||
import org.jetbrains.kotlin.idea.debugger.test.preference.DebuggerPreferences
|
||||
import org.jetbrains.kotlin.idea.debugger.test.util.XDebuggerTestUtil
|
||||
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
|
||||
@@ -45,14 +43,7 @@ abstract class KotlinDescriptorTestCaseWithStackFrames() : KotlinDescriptorTestC
|
||||
val agentList = mutableListOf<JpsMavenRepositoryLibraryDescriptor>()
|
||||
val classPath = mutableListOf<String>()
|
||||
|
||||
protected fun out(stackFrame: StackFrameItem) {
|
||||
if (stackFrame is CreationCoroutineStackFrameItem && stackFrame.first)
|
||||
out(0, "Creation stack frame")
|
||||
out(INDENT_FRAME, stackFrame.format())
|
||||
outVariables(debugProcess.invokeInManagerThread { stackFrame.createFrame(debugProcess) } ?: return)
|
||||
}
|
||||
|
||||
protected fun out(frame: JavaStackFrame) {
|
||||
protected fun out(frame: XStackFrame) {
|
||||
out(INDENT_FRAME, XDebuggerTestUtil.getFramePresentation(frame))
|
||||
outVariables(frame)
|
||||
}
|
||||
@@ -92,18 +83,33 @@ abstract class KotlinDescriptorTestCaseWithStackFrames() : KotlinDescriptorTestC
|
||||
try {
|
||||
out("Thread stack trace:")
|
||||
val stackFrames: List<XStackFrame> = XDebuggerTestUtil.collectFrames(executionStack)
|
||||
for (frame in stackFrames) {
|
||||
if (frame is JavaStackFrame) {
|
||||
out(frame)
|
||||
val stackFrames = asyncStackTraceProvider?.getAsyncStackTrace(frame, suspendContext as SuspendContextImpl)
|
||||
if (stackFrames != null) {
|
||||
if (stackFrames is PreflightProvider) {
|
||||
val preflightFrame = stackFrames.getPreflight()
|
||||
out(0, preflightFrame.coroutineInfoData.key.toString())
|
||||
val suspendContextImpl = suspendContext as SuspendContextImpl
|
||||
suspendContextImpl.runActionInSuspendCommand {
|
||||
for (frame in stackFrames) {
|
||||
if (frame is JavaStackFrame) {
|
||||
out(frame)
|
||||
val stackFrames = suspendContext.invokeInSuspendManagerThread(debugProcess) {
|
||||
asyncStackTraceProvider?.getAsyncStackTrace(frame, suspendContextImpl)
|
||||
}
|
||||
if (stackFrames != null) {
|
||||
if (stackFrames is PreflightProvider) {
|
||||
val preflightFrame = stackFrames.getPreflight()
|
||||
out(0, preflightFrame.coroutineInfoData.key.toString())
|
||||
}
|
||||
for (frameItem in stackFrames) {
|
||||
if (frameItem is CreationCoroutineStackFrameItem && frameItem.first)
|
||||
out(0, "Creation stack frame")
|
||||
|
||||
val frame: XStackFrame? = suspendContext.invokeInSuspendManagerThread(debugProcess) {
|
||||
frameItem.createFrame(debugProcess)
|
||||
}
|
||||
frame?.let {
|
||||
out(frame)
|
||||
}
|
||||
|
||||
}
|
||||
return@runActionInSuspendCommand
|
||||
}
|
||||
for (frameItem in stackFrames)
|
||||
out(frameItem)
|
||||
return@doWhenXSessionPausedThenResume
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -118,7 +124,6 @@ abstract class KotlinDescriptorTestCaseWithStackFrames() : KotlinDescriptorTestC
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected fun getAsyncStackTraceProvider(): CoroutineAsyncStackTraceProvider? {
|
||||
val area = Extensions.getArea(null)
|
||||
if (!area.hasExtensionPoint(ASYNC_STACKTRACE_EP_NAME)) {
|
||||
|
||||
+16
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.debugger.test
|
||||
import com.intellij.debugger.actions.MethodSmartStepTarget
|
||||
import com.intellij.debugger.engine.*
|
||||
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl
|
||||
import com.intellij.debugger.engine.events.SuspendContextCommandImpl
|
||||
import com.intellij.debugger.impl.DebuggerContextImpl
|
||||
import com.intellij.debugger.impl.JvmSteppingCommandProvider
|
||||
import com.intellij.debugger.impl.PositionUtil
|
||||
@@ -157,4 +158,19 @@ abstract class KotlinDescriptorTestCaseWithStepping : KotlinDescriptorTestCase()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected fun SuspendContextImpl.runActionInSuspendCommand(action: SuspendContextImpl.() -> Unit) {
|
||||
if (myInProgress) {
|
||||
action()
|
||||
} else {
|
||||
val command = object : SuspendContextCommandImpl(this) {
|
||||
override fun contextAction(suspendContext: SuspendContextImpl) {
|
||||
action(suspendContext)
|
||||
}
|
||||
}
|
||||
|
||||
// Try to execute the action inside a command if we aren't already inside it.
|
||||
debuggerSession.process.managerThread?.invoke(command) ?: command.contextAction(this)
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -33,8 +33,8 @@ public class XCoroutinesStackTraceTestGenerated extends AbstractXCoroutinesStack
|
||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/xcoroutines/coroutineSuspendFun.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("coroutineSuspendFun135.kt")
|
||||
public void testCoroutineSuspendFun135() throws Exception {
|
||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/xcoroutines/coroutineSuspendFun135.kt");
|
||||
@TestMetadata("coroutineSuspendFun136.kt")
|
||||
public void testCoroutineSuspendFun136() throws Exception {
|
||||
runTest("idea/jvm-debugger/jvm-debugger-test/testData/xcoroutines/coroutineSuspendFun136.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,17 +8,17 @@ Thread stack trace:
|
||||
a:21, SuspendFunKt (coroutine1)
|
||||
($completion, $continuation, $result, a, aParam)
|
||||
CoroutineNameIdState(name=coroutine, id=-1, state=UNKNOWN, dispatcher=null)
|
||||
test1:15, coroutine1.SuspendFunKt
|
||||
test1:15, SuspendFunKt (coroutine1)
|
||||
(i, test1)
|
||||
invoke:9, coroutine1.SuspendFunKt$main$result$1
|
||||
invoke:9, SuspendFunKt$main$result$1 (coroutine1)
|
||||
(continuation, p1, this)
|
||||
invokeSuspend:121, kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3
|
||||
invokeSuspend:121, IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3 (kotlin.coroutines.intrinsics)
|
||||
($i$a$-createCoroutineFromSuspendFunction-IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$2, it, result, this)
|
||||
resumeWith:33, kotlin.coroutines.jvm.internal.BaseContinuationImpl
|
||||
resumeWith:33, BaseContinuationImpl (kotlin.coroutines.jvm.internal)
|
||||
($i$a$-with-BaseContinuationImpl$resumeWith$1, $this$with, completion, current, param, result, this)
|
||||
startCoroutine:128, kotlin.coroutines.ContinuationKt
|
||||
startCoroutine:128, ContinuationKt (kotlin.coroutines)
|
||||
($this$startCoroutine, completion, receiver)
|
||||
main:9, coroutine1.SuspendFunKt
|
||||
main:9, SuspendFunKt (coroutine1)
|
||||
(cnt)
|
||||
Disconnected from the target VM
|
||||
|
||||
|
||||
+16
-16
@@ -8,38 +8,38 @@ Thread stack trace:
|
||||
b:23, CoroutineSuspendFunKt (continuation)
|
||||
($completion, $continuation, $result, b, paramA)
|
||||
CoroutineNameIdState(name=coroutine, id=1, state=RUNNING, dispatcher=BlockingEventLoop@6f45df59)
|
||||
a:16, continuation.CoroutineSuspendFunKt
|
||||
a:16, CoroutineSuspendFunKt (continuation)
|
||||
(a)
|
||||
invokeSuspend:10, continuation.CoroutineSuspendFunKt$main$1
|
||||
invokeSuspend:10, CoroutineSuspendFunKt$main$1 (continuation)
|
||||
($this$runBlocking)
|
||||
resumeWith:33, kotlin.coroutines.jvm.internal.BaseContinuationImpl
|
||||
resumeWith:33, BaseContinuationImpl (kotlin.coroutines.jvm.internal)
|
||||
($i$a$-with-BaseContinuationImpl$resumeWith$1, $this$with, completion, current, param, result, this)
|
||||
run:56, kotlinx.coroutines.DispatchedTask
|
||||
run:56, DispatchedTask (kotlinx.coroutines)
|
||||
($i$a$-withCoroutineContext-DispatchedTask$run$1, $i$f$withCoroutineContext, context, continuation, countOrElement$iv, delegate, exception, fatalException, job, oldValue$iv, state, taskContext, this)
|
||||
processNextEvent:272, kotlinx.coroutines.EventLoopImplBase
|
||||
processNextEvent:272, EventLoopImplBase (kotlinx.coroutines)
|
||||
(delayed, this)
|
||||
joinBlocking:79, kotlinx.coroutines.BlockingCoroutine
|
||||
joinBlocking:79, BlockingCoroutine (kotlinx.coroutines)
|
||||
(this)
|
||||
runBlocking:54, kotlinx.coroutines.BuildersKt__BuildersKt
|
||||
runBlocking:54, BuildersKt__BuildersKt (kotlinx.coroutines)
|
||||
(block, context, contextInterceptor, coroutine, currentThread, eventLoop, newContext)
|
||||
runBlocking:1, kotlinx.coroutines.BuildersKt
|
||||
runBlocking:1, BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
runBlocking$default:36, kotlinx.coroutines.BuildersKt__BuildersKt
|
||||
runBlocking$default:36, BuildersKt__BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
runBlocking$default:1, kotlinx.coroutines.BuildersKt
|
||||
runBlocking$default:1, BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
main:9, continuation.CoroutineSuspendFunKt
|
||||
main:9, CoroutineSuspendFunKt (continuation)
|
||||
(main)
|
||||
Creation stack frame
|
||||
createCoroutineUnintercepted:116, kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt
|
||||
createCoroutineUnintercepted:116, IntrinsicsKt__IntrinsicsJvmKt (kotlin.coroutines.intrinsics)
|
||||
()
|
||||
startCoroutineCancellable:26, kotlinx.coroutines.intrinsics.CancellableKt
|
||||
startCoroutineCancellable:26, CancellableKt (kotlinx.coroutines.intrinsics)
|
||||
()
|
||||
runBlocking$default:1, kotlinx.coroutines.BuildersKt
|
||||
runBlocking$default:1, BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
main:9, continuation.CoroutineSuspendFunKt
|
||||
main:9, CoroutineSuspendFunKt (continuation)
|
||||
()
|
||||
main:-1, continuation.CoroutineSuspendFunKt
|
||||
main:-1, CoroutineSuspendFunKt (continuation)
|
||||
()
|
||||
Disconnected from the target VM
|
||||
|
||||
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
LineBreakpoint created at coroutineSuspendFun135.kt:29
|
||||
Run Java
|
||||
Connected to the target VM
|
||||
coroutineSuspendFun135.kt:29
|
||||
Thread stack trace:
|
||||
c:29, CoroutineSuspendFun135Kt (continuation)
|
||||
($completion, c, paramB)
|
||||
b:23, CoroutineSuspendFun135Kt (continuation)
|
||||
($completion, $continuation, $result, b, paramA)
|
||||
CoroutineNameIdState(name=coroutine, id=1, state=RUNNING, dispatcher=BlockingEventLoop@305fd85d)
|
||||
a:16, continuation.CoroutineSuspendFun135Kt
|
||||
(a)
|
||||
invokeSuspend:10, continuation.CoroutineSuspendFun135Kt$main$1
|
||||
($this$runBlocking)
|
||||
resumeWith:33, kotlin.coroutines.jvm.internal.BaseContinuationImpl
|
||||
($i$a$-with-BaseContinuationImpl$resumeWith$1, $this$with, completion, current, param, result, this)
|
||||
run:56, kotlinx.coroutines.DispatchedTask
|
||||
($i$a$-withCoroutineContext-DispatchedTask$run$1, $i$f$withCoroutineContext, context, continuation, countOrElement$iv, delegate, exception, fatalException, job, oldValue$iv, state, taskContext, this)
|
||||
processNextEvent:274, kotlinx.coroutines.EventLoopImplBase
|
||||
(delayed, task, this)
|
||||
joinBlocking:79, kotlinx.coroutines.BlockingCoroutine
|
||||
(this)
|
||||
runBlocking:54, kotlinx.coroutines.BuildersKt__BuildersKt
|
||||
(block, context, contextInterceptor, coroutine, currentThread, eventLoop, newContext)
|
||||
runBlocking:1, kotlinx.coroutines.BuildersKt
|
||||
()
|
||||
runBlocking$default:36, kotlinx.coroutines.BuildersKt__BuildersKt
|
||||
()
|
||||
runBlocking$default:1, kotlinx.coroutines.BuildersKt
|
||||
()
|
||||
main:9, continuation.CoroutineSuspendFun135Kt
|
||||
(main)
|
||||
Creation stack frame
|
||||
createCoroutineUnintercepted:116, kotlin.coroutines.intrinsics.IntrinsicsKt__IntrinsicsJvmKt
|
||||
()
|
||||
startCoroutineCancellable:26, kotlinx.coroutines.intrinsics.CancellableKt
|
||||
()
|
||||
runBlocking$default:1, kotlinx.coroutines.BuildersKt
|
||||
()
|
||||
main:9, continuation.CoroutineSuspendFun135Kt
|
||||
()
|
||||
main:-1, continuation.CoroutineSuspendFun135Kt
|
||||
()
|
||||
Disconnected from the target VM
|
||||
|
||||
Process finished with exit code 0
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
LineBreakpoint created at coroutineSuspendFun136.kt:29
|
||||
Run Java
|
||||
Connected to the target VM
|
||||
coroutineSuspendFun136.kt:29
|
||||
Thread stack trace:
|
||||
c:29, CoroutineSuspendFun136Kt (continuation)
|
||||
($completion, c, paramB)
|
||||
b:23, CoroutineSuspendFun136Kt (continuation)
|
||||
($completion, $continuation, $result, b, paramA)
|
||||
CoroutineNameIdState(name=coroutine, id=1, state=RUNNING, dispatcher=BlockingEventLoop@305fd85d)
|
||||
a:16, CoroutineSuspendFun136Kt (continuation)
|
||||
(a)
|
||||
invokeSuspend:10, CoroutineSuspendFun136Kt$main$1 (continuation)
|
||||
($this$runBlocking)
|
||||
resumeWith:33, BaseContinuationImpl (kotlin.coroutines.jvm.internal)
|
||||
($i$a$-with-BaseContinuationImpl$resumeWith$1, $this$with, completion, current, param, result, this)
|
||||
run:56, DispatchedTask (kotlinx.coroutines)
|
||||
($i$a$-withCoroutineContext-DispatchedTask$run$1, $i$f$withCoroutineContext, context, continuation, countOrElement$iv, delegate, exception, fatalException, job, oldValue$iv, state, taskContext, this)
|
||||
processNextEvent:274, EventLoopImplBase (kotlinx.coroutines)
|
||||
(delayed, task, this)
|
||||
joinBlocking:79, BlockingCoroutine (kotlinx.coroutines)
|
||||
(this)
|
||||
runBlocking:54, BuildersKt__BuildersKt (kotlinx.coroutines)
|
||||
(block, context, contextInterceptor, coroutine, currentThread, eventLoop, newContext)
|
||||
runBlocking:1, BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
runBlocking$default:36, BuildersKt__BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
runBlocking$default:1, BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
main:9, CoroutineSuspendFun136Kt (continuation)
|
||||
(main)
|
||||
Creation stack frame
|
||||
createCoroutineUnintercepted:116, IntrinsicsKt__IntrinsicsJvmKt (kotlin.coroutines.intrinsics)
|
||||
()
|
||||
startCoroutineCancellable:26, CancellableKt (kotlinx.coroutines.intrinsics)
|
||||
()
|
||||
runBlocking$default:1, BuildersKt (kotlinx.coroutines)
|
||||
()
|
||||
main:9, CoroutineSuspendFun136Kt (continuation)
|
||||
()
|
||||
main:-1, CoroutineSuspendFun136Kt (continuation)
|
||||
()
|
||||
Disconnected from the target VM
|
||||
|
||||
Process finished with exit code 0
|
||||
Reference in New Issue
Block a user