I have a theory now for why the error below occurs:
java.lang.VerifyError: (class: Test7, method: main signature: ([Ljava/lang/String;)V) Incompatible object argument for function call Exception in thread "main"
I am calling invokevirtual edu/rice/cs/cunit/ProperObject.wait$$$Decorator$$$()V
on a Thread
object, but I haven’t made ProperObject
a superclass of Thread
yet.
I guess I have to do that now… that’s a big, big instrumentation of many, many classes and likely to cause more errors. Makes me sick to my stomach, but there’s no way around.
Update
As expected, instrumenting the entire rt.jar with the ProperObjectSuperClassStrategy
didn’t work, the VM doesn’t even initialize. I think it may have to do with the placement of ProperObject
. I’ll try putting it in the java.lang
package.
I also just noticed that the ProperObjectSuperClassStrategy
strategy was affecting ProperObject
itself, so ProperObject
was its own superclass. I’m working on changing that and rerunning the tests.
Update
Now I’m getting a “java.exe – Application Error. The instruction at ‘0x6d749f0f’ referenced memory at ‘0x00000064’. The memory could not be ‘read’. Click OK to terminate the program. Click CANCEL to debug the program.” error. Lovely!
And I have no idea why!
Update
I’m excluding certain classes from the rt.jar now, and sometimes it works, sometimes it doesn’t. Right now, I’m excluding the com.*
, java.*
, javax.*
, sun.*
, and sunw.*
packages, but instrumenting java.lang.Number
and the test programs, and it works. It seems like there will be a few classes again where this method doesn’t work, and I’ll have to come up with workarounds for the exceptions. Sigh.
Update
Now I’ve limited it to just the java.*
and sun.*
packages.