diff --git a/Changelog.md b/Changelog.md index dbd414090d7..83274081b46 100644 --- a/Changelog.md +++ b/Changelog.md @@ -24,3 +24,4 @@ - Debugger can distinguish nested inline arguments - Add kotlinClassName() and kotlinFunctionName() macros for use in live templates - Complete private members from libraries in Evaluate Expression dialog +- Show error message when debug info for some local variable is corrupted \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt index a2ef0a9eb3e..1a2680579d7 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/debuggerUtil.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.debugger import com.intellij.debugger.engine.DebugProcessImpl +import com.intellij.debugger.jdi.LocalVariableProxyImpl import com.sun.jdi.* import com.sun.tools.jdi.LocalVariableImpl import org.jetbrains.kotlin.codegen.binding.CodegenBinding @@ -28,11 +29,11 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.inline.InlineUtil import java.util.* -fun isInsideInlineFunctionBody(visibleVariables: List): Boolean { +fun isInsideInlineFunctionBody(visibleVariables: List): Boolean { return visibleVariables.any { it.name().startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION) } } -fun numberOfInlinedFunctions(visibleVariables: List): Int { +fun numberOfInlinedFunctions(visibleVariables: List): Int { return visibleVariables.count { it.name().startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/FrameVisitor.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/FrameVisitor.kt index dfc0a04de94..9908ff913ec 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/FrameVisitor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/FrameVisitor.kt @@ -36,7 +36,7 @@ import org.jetbrains.org.objectweb.asm.Type class FrameVisitor(context: EvaluationContextImpl) { private val project = context.debugProcess.project - private val frame = context.frameProxy?.stackFrame + private val frame = context.frameProxy companion object { val OBJECT_TYPE = Type.getType(Any::class.java) @@ -192,7 +192,7 @@ class FrameVisitor(context: EvaluationContextImpl) { private fun getField(owner: Value, name: String, asmType: Type?, checkType: Boolean): Value? { try { - val obj = owner.asJdiValue(frame!!.virtualMachine(), owner.asmType) + val obj = owner.asJdiValue(frame!!.virtualMachine.virtualMachine, owner.asmType) if (obj !is ObjectReference) return null val _class = obj.referenceType()