debug information test: handle vm resume correctly.

This commit is contained in:
Jiaxiang Chen
2019-11-05 13:55:00 -08:00
committed by Ilmir Usmanov
parent 251899c31a
commit 0ea407fef9
4 changed files with 22 additions and 21 deletions
@@ -12,9 +12,9 @@ fun box() {
// TestKt:8:
// A:3: x:java.lang.String, y:int
// TestKt:8:
// TestKt:5: $dstr$x$y:A
// TestKt$box$1:8:
// TestKt$box$1.invoke(java.lang.Object)+8: a:A, block:TestKt$box$1
// TestKt:5: a:A, block:TestKt$box$1
// TestKt$box$1:8: $dstr$x$y:A
// TestKt$box$1.invoke(java.lang.Object)+8:
// TestKt:5: a:A, block:TestKt$box$1
// TestKt:8:
// TestKt:9:
+1 -1
View File
@@ -11,6 +11,6 @@ fun box() {
// IGNORE_BACKEND: JVM_IR
// LOCAL VARIABLES
// TestKt:9:
// TestKt:4: $fun$bar$1:TestKt$foo$1
// TestKt:4:
// TestKt:6: $fun$bar$1:TestKt$foo$1
// TestKt:10:
+11 -11
View File
@@ -28,22 +28,22 @@ fun box() {
// A:3: x:double, y:java.lang.String, z:char
// A:3:
// TestKt:11:
// TestKt:5: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int
// TestKt$box$1:14:
// TestKt:5: a:A, block:TestKt$box$1
// TestKt$box$1:14: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int
// A:3:
// A:3: x:double, y:java.lang.String, z:char
// A:3:
// A:3: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char
// TestKt$box$1:14: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char
// TestKt$box$1:15:
// TestKt$box$1:14: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char
// TestKt$box$1:15: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char
// A:3:
// A:3: x:double, y:java.lang.String, z:char
// A:3:
// A:3: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char
// TestKt$box$1:15: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char, _:java.lang.String, d:char
// TestKt$box$1:17:
// TestKt:7: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char, _:java.lang.String, d:char
// TestKt$box$1:15: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char
// TestKt$box$1:17: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char, _:java.lang.String, d:char
// TestKt$box$1:21:
// TestKt$box$1.invoke(java.lang.Object, java.lang.Object, java.lang.Object)+19: a:A, block:TestKt$box$1
// TestKt:7:
// TestKt$box$1:17: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char, _:java.lang.String, d:char
// TestKt$box$1:21: $dstr$x$_u24__u24$y:A, $noName_1:java.lang.String, w:int, x:double, y:char, a:double, c:char, _:java.lang.String, d:char
// TestKt$box$1.invoke(java.lang.Object, java.lang.Object, java.lang.Object)+19:
// TestKt:5: a:A, block:TestKt$box$1
// TestKt:11:
// TestKt:23:
@@ -170,6 +170,9 @@ abstract class AbstractDebugTest : CodegenTestCase() {
val classLoader = createGeneratedClassLoader(classesDir)
val aClass = getGeneratedClass(classLoader, TEST_CLASS)
if (virtualMachine.allThreads().any { it.isSuspended }) {
virtualMachine.resume()
}
invokeBoxInSeparateProcess(classLoader, aClass, proxyPort)
val manager = virtualMachine.eventRequestManager()
@@ -178,7 +181,7 @@ abstract class AbstractDebugTest : CodegenTestCase() {
var inBoxMethod = false
vmLoop@
while (true) {
val eventSet = virtualMachine.eventQueue().remove(1000)
val eventSet = virtualMachine.eventQueue().remove(1000) ?: continue
for (event in eventSet) {
when (event) {
is VMDeathEvent, is VMDisconnectEvent -> {
@@ -201,33 +204,31 @@ abstract class AbstractDebugTest : CodegenTestCase() {
inBoxMethod = true
storeStep(loggedItems, event)
}
virtualMachine.resume()
}
is StepEvent -> {
// Handle the case where an Exception causing program to exit without MethodExitEvent.
if (inBoxMethod && event.location().method().name() == "run") {
virtualMachine.resume()
manager.stepRequests().map { it.disable() }
break@vmLoop
}
if (inBoxMethod) {
storeStep(loggedItems, event)
}
virtualMachine.resume()
}
is MethodExitEvent -> {
if (event.location().method().name() == BOX_METHOD) {
manager.stepRequests().map { it.disable() }
virtualMachine.resume()
break@vmLoop
}
virtualMachine.resume()
}
else -> {
throw IllegalStateException("event not handled: $event")
}
}
}
eventSet.resume()
}
virtualMachine.resume()
checkResult(wholeFile, loggedItems)
}