Debugger: use StackFrameProxy from IDEA instead of StackFrame from JDI to show error message when debug info in corrupted
#EA-76187 - IE: FrameVisitor.findLocalVariable Fixed
This commit is contained in:
@@ -24,3 +24,4 @@
|
|||||||
- Debugger can distinguish nested inline arguments
|
- Debugger can distinguish nested inline arguments
|
||||||
- Add kotlinClassName() and kotlinFunctionName() macros for use in live templates
|
- Add kotlinClassName() and kotlinFunctionName() macros for use in live templates
|
||||||
- Complete private members from libraries in Evaluate Expression dialog
|
- Complete private members from libraries in Evaluate Expression dialog
|
||||||
|
- Show error message when debug info for some local variable is corrupted
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.debugger
|
package org.jetbrains.kotlin.idea.debugger
|
||||||
|
|
||||||
import com.intellij.debugger.engine.DebugProcessImpl
|
import com.intellij.debugger.engine.DebugProcessImpl
|
||||||
|
import com.intellij.debugger.jdi.LocalVariableProxyImpl
|
||||||
import com.sun.jdi.*
|
import com.sun.jdi.*
|
||||||
import com.sun.tools.jdi.LocalVariableImpl
|
import com.sun.tools.jdi.LocalVariableImpl
|
||||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
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 org.jetbrains.kotlin.resolve.inline.InlineUtil
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
fun isInsideInlineFunctionBody(visibleVariables: List<LocalVariable>): Boolean {
|
fun isInsideInlineFunctionBody(visibleVariables: List<LocalVariableProxyImpl>): Boolean {
|
||||||
return visibleVariables.any { it.name().startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION) }
|
return visibleVariables.any { it.name().startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun numberOfInlinedFunctions(visibleVariables: List<LocalVariable>): Int {
|
fun numberOfInlinedFunctions(visibleVariables: List<LocalVariableProxyImpl>): Int {
|
||||||
return visibleVariables.count { it.name().startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION) }
|
return visibleVariables.count { it.name().startsWith(JvmAbi.LOCAL_VARIABLE_NAME_PREFIX_INLINE_FUNCTION) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import org.jetbrains.org.objectweb.asm.Type
|
|||||||
|
|
||||||
class FrameVisitor(context: EvaluationContextImpl) {
|
class FrameVisitor(context: EvaluationContextImpl) {
|
||||||
private val project = context.debugProcess.project
|
private val project = context.debugProcess.project
|
||||||
private val frame = context.frameProxy?.stackFrame
|
private val frame = context.frameProxy
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val OBJECT_TYPE = Type.getType(Any::class.java)
|
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? {
|
private fun getField(owner: Value, name: String, asmType: Type?, checkType: Boolean): Value? {
|
||||||
try {
|
try {
|
||||||
val obj = owner.asJdiValue(frame!!.virtualMachine(), owner.asmType)
|
val obj = owner.asJdiValue(frame!!.virtualMachine.virtualMachine, owner.asmType)
|
||||||
if (obj !is ObjectReference) return null
|
if (obj !is ObjectReference) return null
|
||||||
|
|
||||||
val _class = obj.referenceType()
|
val _class = obj.referenceType()
|
||||||
|
|||||||
Reference in New Issue
Block a user