Error Theory

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.

Share

About Mathias

Software development engineer. Principal developer of DrJava. Recent Ph.D. graduate from the Department of Computer Science at Rice University.
This entry was posted in Concurrent Unit Testing. Bookmark the permalink.

Leave a Reply