diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinStackFrame.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinStackFrame.kt index 15694b479fe..cdd0e384651 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinStackFrame.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinStackFrame.kt @@ -25,8 +25,7 @@ import org.jetbrains.kotlin.codegen.inline.isFakeLocalVariableForInline class KotlinStackFrame(frame: StackFrameProxyImpl) : JavaStackFrame(StackFrameDescriptorImpl(frame, MethodsTracker()), true) { override fun getVisibleVariables(): List? { - return super.getVisibleVariables().filter { - !isFakeLocalVariableForInline(it.name()) - } + return super.getStackFrameProxy().visibleVariablesSafe() + .filter { !isFakeLocalVariableForInline(it.name()) } } } \ No newline at end of file diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt index 53224102643..2334dc3f152 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt @@ -7,10 +7,12 @@ package org.jetbrains.kotlin.idea.debugger import com.intellij.debugger.engine.DebugProcessImpl import com.intellij.debugger.engine.DebuggerManagerThreadImpl +import com.intellij.debugger.engine.evaluation.AbsentInformationEvaluateException import com.intellij.debugger.engine.events.DebuggerCommandImpl import com.intellij.debugger.impl.DebuggerContextImpl import com.intellij.debugger.impl.DebuggerUtilsEx import com.intellij.debugger.jdi.LocalVariableProxyImpl +import com.intellij.debugger.jdi.StackFrameProxyImpl import com.intellij.psi.PsiElement import com.sun.jdi.* import com.sun.tools.jdi.LocalVariableImpl @@ -30,6 +32,17 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.inline.InlineUtil import java.util.* +fun StackFrameProxyImpl.visibleVariablesSafe(): List { + try { + return visibleVariables() + } catch (e: AbsentInformationEvaluateException) { + // Current implementation of visibleVariables() wraps an AbsentInformationException into EvaluateException + return emptyList() + } catch (e: AbsentInformationException) { + return emptyList() + } +} + fun Method.safeAllLineLocations(): List { return DebuggerUtilsEx.allLineLocations(this) ?: emptyList() } diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt index 908c5a8c515..356ac09bf16 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/stepping/KotlinSteppingCommandProvider.kt @@ -523,7 +523,7 @@ private fun SuspendContextImpl.getNextPositionWithFilter( } fun getInlineRangeLocalVariables(stackFrame: StackFrameProxyImpl): List { - return stackFrame.visibleVariables() + return stackFrame.visibleVariablesSafe() .filter { val name = it.name() name.startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION)