<AWT Dev> Need a hint on how to debug a VM assertion failure caused by my awt code

Pete Brunet peter.brunet at oracle.com
Mon Aug 30 14:16:52 PDT 2010


p.s. I tried the various JNI -XX switches listed here, at least the ones
that made sense to try in my situation:
http://www.md.pp.ru/~eu/jdk6options.html

Pete Brunet wrote:
> I'm looking for guidance in how to debug the following jvm assert
> failure.  I've tried both -Xcheck:jni and -verbose:jni but neither of
> those added any information at the point of failure.  Thanks, Pete
>
> #  Internal Error
> (c:\OpenJDK-b96m\jdk7\hotspot\src\share\vm\interpreter\linkResolver.cpp:71),
> pid=5216, tid=7228
> #  assert(resolved_method->signature() == selected_method->signature())
> failed: signatures must correspond
>
> The stack looks like this:
>
> V  [jvm.dll+0x3a8894]
> V  [jvm.dll+0x128195]
> V  [jvm.dll+0x29b5fd]
> V  [jvm.dll+0x29e42e]
> V  [jvm.dll+0x29f795]
> V  [jvm.dll+0x29f8f8]
> V  [jvm.dll+0x1a2e50]
> j 
> java.awt.Component$1.getAccessibleContext(Ljava/awt/Component;)Ljavax/accessibility/AccessibleContext;+16
> v  ~StubRoutines::call_stub
> ...
>
> The calling code in awt_Component.cpp looks like this:
>
> In AwtComponent::InitIDs:
>
>     jclass awtAccessorCls = env->FindClass("sun/awt/AWTAccessor");
>     jclass componentAccessorCls =
> env->FindClass("sun/awt/AWTAccessor$ComponentAccessor");
>     DASSERT(awtAccessorCls);
>     DASSERT(componentAccessorCls);
>     ...
>     AwtComponent::getComponentAccessorMID =
>         env->GetStaticMethodID(awtAccessorCls, "getComponentAccessor",
> "()Lsun/awt/AWTAccessor$ComponentAccessor;");
>     AwtComponent::getAccessibleContextMID =
>         env->GetMethodID(componentAccessorCls, "getAccessibleContext",
> "(Ljava/awt/Component;)Ljavax/accessibility/AccessibleContext;");
>     DASSERT(AwtComponnet::getComponentAccessorMID);
>     DASSERT(AwtComponent::getAccessibleContextMID);
>     ...
>
> jobject AwtComponent::GetAccessibleContext(HWND hwnd) {
>     JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
>     jclass awtAccessorCls = env->FindClass("sun/awt/AWTAccessor");
>     jobject ca = env->CallStaticObjectMethod(awtAccessorCls,
> AwtComponent::getComponentAccessorMID);
>     DASSERT(!safe_ExceptionOccurred(env));
>     AwtComponent* c = GetComponentImpl(hwnd);
>     jobject self = c->GetPeer(env);  // self is the java side of the
> peer code, i.e. the Component
>     jobject ac = env->CallObjectMethod(ca,
> AwtComponent::getAccessibleContextMID, self);
>     ...
>
> The called method, getAccessibleContext, in java.awt.Component looks
> like this:
>
>     static {
>       AWTAccessor.setComponentAccessor(new AWTAccessor.ComponentAccessor() {
>           ...
>           public AccessibleContext getAccessibleContext(Component comp) {
>               return comp.accessibleContext;
>           }
>       });
>     }
>
> Thanks, Pete
>   



More information about the awt-dev mailing list