Test stopped using breakpoint
NORMAL RUN: Single call with no interference on (ID: 0) StandardTestObject { cnt: 0 }
NORMAL RUN: result for (ID: 0) StandardTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 1) StandardTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 0 }
result for (ID: 1) StandardTestObject { cnt: 1 } is OveriddenReturnValue { id: 0 }
Test stopped using breakpoint with declared synchronized function
NORMAL RUN: Single call with no interference on (ID: 2) SynchronizedFunctionTestObject { cnt: 0 }
NORMAL RUN: result for (ID: 2) SynchronizedFunctionTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 3) SynchronizedFunctionTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 1 }
result for (ID: 3) SynchronizedFunctionTestObject { cnt: 1 } is OveriddenReturnValue { id: 1 }
Test stopped using breakpoint with synchronized block
NORMAL RUN: Single call with no interference on (ID: 4) SynchronizedTestObject { cnt: 0 }
NORMAL RUN: result for (ID: 4) SynchronizedTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 5) SynchronizedTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 2 }
result for (ID: 5) SynchronizedTestObject { cnt: 1 } is OveriddenReturnValue { id: 2 }
Test stopped on single step
NORMAL RUN: Single call with no interference on (ID: 6) StandardTestObject { cnt: 0 }
NORMAL RUN: result for (ID: 6) StandardTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 7) StandardTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 3 }
result for (ID: 7) StandardTestObject { cnt: 1 } is OveriddenReturnValue { id: 3 }
Test stopped on field access
NORMAL RUN: Single call with no interference on (ID: 8) FieldBasedTestObject { TARGET_FIELD: 0 }
NORMAL RUN: result for (ID: 8) FieldBasedTestObject { TARGET_FIELD: 10 } is IntContainer { value: 10 }
Single call with force-early-return on (ID: 9) FieldBasedTestObject { TARGET_FIELD: 0 }
Will force return of OveriddenReturnValue { id: 4 }
result for (ID: 9) FieldBasedTestObject { TARGET_FIELD: 0 } is OveriddenReturnValue { id: 4 }
Test stopped on field modification
NORMAL RUN: Single call with no interference on (ID: 10) FieldBasedTestObject { TARGET_FIELD: 0 }
NORMAL RUN: result for (ID: 10) FieldBasedTestObject { TARGET_FIELD: 10 } is IntContainer { value: 10 }
Single call with force-early-return on (ID: 11) FieldBasedTestObject { TARGET_FIELD: 0 }
Will force return of OveriddenReturnValue { id: 5 }
result for (ID: 11) FieldBasedTestObject { TARGET_FIELD: 0 } is OveriddenReturnValue { id: 5 }
Test stopped during Method Exit of calledFunction
NORMAL RUN: Single call with no interference on (ID: 12) StandardTestObject { cnt: 0 }
NORMAL RUN: result for (ID: 12) StandardTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 13) StandardTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 6 }
result for (ID: 13) StandardTestObject { cnt: 2 } is OveriddenReturnValue { id: 6 }
Test stopped during Method Enter of calledFunction
NORMAL RUN: Single call with no interference on (ID: 14) StandardTestObject { cnt: 0 }
NORMAL RUN: result for (ID: 14) StandardTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 15) StandardTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 7 }
result for (ID: 15) StandardTestObject { cnt: 0 } is OveriddenReturnValue { id: 7 }
Test stopped during Method Exit due to exception thrown in same function
NORMAL RUN: Single call with no interference on (ID: 16) ExceptionOnceObject { cnt: 0, throwInSub: false }
Uncaught exception in thread Thread[Test1968 target thread - 16,5,main] - art.Test1968$ExceptionOnceObject$TestError: null
	art.Test1968$ExceptionOnceObject.calledFunction(Test1968.java)
	art.Test1968$AbstractTestObject.run(Test1968.java)
	art.Test1968$2.run(Test1968.java)
	java.lang.Thread.run(Thread.java)

NORMAL RUN: result for (ID: 16) ExceptionOnceObject { cnt: 1, throwInSub: false } is null
Single call with force-early-return on (ID: 17) ExceptionOnceObject { cnt: 0, throwInSub: false }
Will force return of OveriddenReturnValue { id: 8 }
result for (ID: 17) ExceptionOnceObject { cnt: 1, throwInSub: false } is OveriddenReturnValue { id: 8 }
Test stopped during Method Exit due to exception thrown in subroutine
NORMAL RUN: Single call with no interference on (ID: 18) ExceptionOnceObject { cnt: 0, throwInSub: true }
Uncaught exception in thread Thread[Test1968 target thread - 18,5,main] - art.Test1968$ExceptionOnceObject$TestError: null
	art.Test1968$ExceptionOnceObject.doThrow(Test1968.java)
	art.Test1968$ExceptionOnceObject.calledFunction(Test1968.java)
	art.Test1968$AbstractTestObject.run(Test1968.java)
	art.Test1968$2.run(Test1968.java)
	java.lang.Thread.run(Thread.java)

NORMAL RUN: result for (ID: 18) ExceptionOnceObject { cnt: 1, throwInSub: true } is null
Single call with force-early-return on (ID: 19) ExceptionOnceObject { cnt: 0, throwInSub: true }
Will force return of OveriddenReturnValue { id: 9 }
result for (ID: 19) ExceptionOnceObject { cnt: 1, throwInSub: true } is OveriddenReturnValue { id: 9 }
Test stopped during notifyFramePop with exception on pop of calledFunction
NORMAL RUN: Single call with no interference on (ID: 20) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
art.Test1968$ExceptionThrowTestObject$TestError thrown and caught!
NORMAL RUN: result for (ID: 20) ExceptionThrowTestObject { cnt: 2, baseCnt: 2 } is null
Single call with force-early-return on (ID: 21) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
Will force return of OveriddenReturnValue { id: 10 }
result for (ID: 21) ExceptionThrowTestObject { cnt: 2, baseCnt: 2 } is OveriddenReturnValue { id: 10 }
Test stopped during notifyFramePop with exception on pop of doThrow
NORMAL RUN: Single call with no interference on (ID: 22) ExceptionCatchTestObject { cnt: 0 }
art.Test1968$ExceptionCatchTestObject$TestError caught in called function.
NORMAL RUN: result for (ID: 22) ExceptionCatchTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 23) ExceptionCatchTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 11 }
result for (ID: 23) ExceptionCatchTestObject { cnt: 101 } is IntContainer { value: 1 }
Test stopped during ExceptionCatch event of calledFunction (catch in called function, throw in called function)
NORMAL RUN: Single call with no interference on (ID: 24) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
art.Test1968$ExceptionThrowTestObject$TestError caught in same function.
NORMAL RUN: result for (ID: 24) ExceptionThrowTestObject { cnt: 111, baseCnt: 2 } is IntContainer { value: 11 }
Single call with force-early-return on (ID: 25) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
Will force return of OveriddenReturnValue { id: 12 }
result for (ID: 25) ExceptionThrowTestObject { cnt: 11, baseCnt: 2 } is OveriddenReturnValue { id: 12 }
Test stopped during ExceptionCatch event of calledFunction (catch in called function, throw in subroutine)
NORMAL RUN: Single call with no interference on (ID: 26) ExceptionCatchTestObject { cnt: 0 }
art.Test1968$ExceptionCatchTestObject$TestError caught in called function.
NORMAL RUN: result for (ID: 26) ExceptionCatchTestObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 27) ExceptionCatchTestObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 13 }
result for (ID: 27) ExceptionCatchTestObject { cnt: 1 } is OveriddenReturnValue { id: 13 }
Test stopped during Exception event of calledFunction (catch in calling function)
NORMAL RUN: Single call with no interference on (ID: 28) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
art.Test1968$ExceptionThrowTestObject$TestError thrown and caught!
NORMAL RUN: result for (ID: 28) ExceptionThrowTestObject { cnt: 2, baseCnt: 2 } is null
Single call with force-early-return on (ID: 29) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
Will force return of OveriddenReturnValue { id: 14 }
result for (ID: 29) ExceptionThrowTestObject { cnt: 2, baseCnt: 2 } is OveriddenReturnValue { id: 14 }
Test stopped during Exception event of calledFunction (catch in called function)
NORMAL RUN: Single call with no interference on (ID: 30) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
art.Test1968$ExceptionThrowTestObject$TestError caught in same function.
NORMAL RUN: result for (ID: 30) ExceptionThrowTestObject { cnt: 111, baseCnt: 2 } is IntContainer { value: 11 }
Single call with force-early-return on (ID: 31) ExceptionThrowTestObject { cnt: 0, baseCnt: 0 }
Will force return of OveriddenReturnValue { id: 15 }
result for (ID: 31) ExceptionThrowTestObject { cnt: 11, baseCnt: 2 } is OveriddenReturnValue { id: 15 }
Test stopped during Exception event of calledFunction (catch in parent of calling function)
NORMAL RUN: Single call with no interference on (ID: 32) ExceptionThrowFarTestObject { cnt: 0, baseCnt: 0 }
art.Test1968$ExceptionThrowFarTestObject$TestError thrown and caught!
NORMAL RUN: result for (ID: 32) ExceptionThrowFarTestObject { cnt: 2, baseCnt: 2 } is null
Single call with force-early-return on (ID: 33) ExceptionThrowFarTestObject { cnt: 0, baseCnt: 0 }
Will force return of OveriddenReturnValue { id: 16 }
result for (ID: 33) ExceptionThrowFarTestObject { cnt: 2, baseCnt: 2 } is OveriddenReturnValue { id: 16 }
Test stopped during Exception event of calledFunction (catch in called function)
NORMAL RUN: Single call with no interference on (ID: 34) ExceptionThrowFarTestObject { cnt: 0, baseCnt: 0 }
art.Test1968$ExceptionThrowFarTestObject$TestError caught in same function.
NORMAL RUN: result for (ID: 34) ExceptionThrowFarTestObject { cnt: 111, baseCnt: 2 } is IntContainer { value: 101 }
Single call with force-early-return on (ID: 35) ExceptionThrowFarTestObject { cnt: 0, baseCnt: 0 }
Will force return of OveriddenReturnValue { id: 17 }
result for (ID: 35) ExceptionThrowFarTestObject { cnt: 101, baseCnt: 2 } is OveriddenReturnValue { id: 17 }
Test stopped during random Suspend.
NORMAL RUN: Single call with no interference on (ID: 36) SuspendSuddenlyObject { cnt: 0, spun: false }
NORMAL RUN: result for (ID: 36) SuspendSuddenlyObject { cnt: 2, spun: true } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 37) SuspendSuddenlyObject { cnt: 0, spun: false }
Will force return of OveriddenReturnValue { id: 18 }
result for (ID: 37) SuspendSuddenlyObject { cnt: 1, spun: true } is OveriddenReturnValue { id: 18 }
Test stopped during a native method fails
NORMAL RUN: Single call with no interference on (ID: 38) NativeCalledObject { cnt: 0 }
NORMAL RUN: result for (ID: 38) NativeCalledObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 39) NativeCalledObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 19 }
Failed to force-return due to java.lang.RuntimeException: JVMTI_ERROR_OPAQUE_FRAME
	art.NonStandardExit.forceEarlyReturnObject(Native Method)
	art.NonStandardExit.forceEarlyReturn(NonStandardExit.java)
	art.Test1968$TestSuspender.performForceReturn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTests(Test1968.java)
	<Additional frames hidden>

result for (ID: 39) NativeCalledObject { cnt: 2 } is IntContainer { value: 1 }
Test stopped in a method called by native succeeds
NORMAL RUN: Single call with no interference on (ID: 40) NativeCallerObject { cnt: 0 }
NORMAL RUN: result for (ID: 40) NativeCallerObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 41) NativeCallerObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 20 }
result for (ID: 41) NativeCallerObject { cnt: 2 } is OveriddenReturnValue { id: 20 }
Test stopped in a static method
NORMAL RUN: Single call with no interference on (ID: 42) StaticMethodObject { cnt: 0 }
NORMAL RUN: result for (ID: 42) StaticMethodObject { cnt: 2 } is IntContainer { value: 1 }
Single call with force-early-return on (ID: 43) StaticMethodObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 21 }
result for (ID: 43) StaticMethodObject { cnt: 1 } is OveriddenReturnValue { id: 21 }
Test force-return of void function fails!
NORMAL RUN: Single call with no interference on (ID: 44) BadForceVoidObject { cnt: 0 }
NORMAL RUN: result for (ID: 44) BadForceVoidObject { cnt: 2 } is null
Single call with force-early-return on (ID: 45) BadForceVoidObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 22 }
Failed to force-return due to java.lang.RuntimeException: JVMTI_ERROR_TYPE_MISMATCH
	art.NonStandardExit.forceEarlyReturnObject(Native Method)
	art.NonStandardExit.forceEarlyReturn(NonStandardExit.java)
	art.Test1968$TestSuspender.performForceReturn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTests(Test1968.java)
	<Additional frames hidden>

result for (ID: 45) BadForceVoidObject { cnt: 2 } is null
Test force-return of int function fails!
NORMAL RUN: Single call with no interference on (ID: 46) BadForceIntObject { cnt: 0 }
NORMAL RUN: result for (ID: 46) BadForceIntObject { cnt: 2 } is 1
Single call with force-early-return on (ID: 47) BadForceIntObject { cnt: 0 }
Will force return of OveriddenReturnValue { id: 23 }
Failed to force-return due to java.lang.RuntimeException: JVMTI_ERROR_TYPE_MISMATCH
	art.NonStandardExit.forceEarlyReturnObject(Native Method)
	art.NonStandardExit.forceEarlyReturn(NonStandardExit.java)
	art.Test1968$TestSuspender.performForceReturn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTestOn(Test1968.java)
	art.Test1968.runTests(Test1968.java)
	<Additional frames hidden>

result for (ID: 47) BadForceIntObject { cnt: 2 } is 1
