java.lang.Class->getFields() results in JVM crash when called through JNI
843829Aug 25 2004 — edited Aug 27 2004From a C++ application, I use Invocation APIs to create a JVM and call some Java methods using JNI
I get a crash in jvm.dll with EXCEPTION_ACCESS_VIOLATION
when I try to call "getFields" method of java.lang.Class in order to get the Fields of the java class
This method call, should return a java/lang/reflect/Fields[] on success
I am able to get the method ID of this method by using pEnv->GetMethodID(..)
However, when I call this method using CallObjectMethod(..), HotSpt JVM crashes with access violation with the dump given below.
Any clues on how to debug and find the problem?
Or has anyone tried getting the fields of a Java class from C++ by calling reflection APIs uing JNI?
Thanks in advance!
Sample code
jclass testerClass = pEnv->FindClass("com/test/Tester");
jmethodID cid = pEnv->GetMethodID(testerClass,"<init>","()V");
if(NULL == cid)
pEnv->ExceptionDescribe();
jobject testerObject = pEnv->NewObjectV(testerClass, mid);
jmethodID mid = pEnv->GetMethodID(testerClass, "getClass",
"()Ljava/lang/Class;");
jobject clsObj = (jobject)pEnv->CallObjectMethod(testerObject, mid);
pEnv->ExceptionDescribe();
jclass jCls = pEnv->GetObjectClass(clsObj);
jmethodID midGetFields = pEnv->GetMethodID(jCls, "getFields",
"()[Ljava/lang/reflect/Field;");
jobjectArray jobjArray = (jobjectArray)pEnv->CallObjectMethod(testerObject, midGetFields);
pEnv->ExceptionDescribe();
Crash dump
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION (0xc0000005) occurred at PC=0x809E69F
Function=JVM_FindSignal+0x11505
Library=D:\Java\j2re1.4.2_03\bin\client\jvm.dll
Current Java thread:
at java.lang.Class.privateGetDeclaredFields(Unknown Source)
at java.lang.Class.privateGetPublicFields(Unknown Source)
at java.lang.Class.getFields(Unknown Source)
Dynamic libraries:
0x00400000 - 0x00419000 E:\SC\SC12.1\SCApplications\SNMP\Bin\JNITester.exe
0x77F50000 - 0x77FF7000 C:\WINDOWS\System32\ntdll.dll
0x77E60000 - 0x77F46000 C:\WINDOWS\system32\kernel32.dll
0x10000000 - 0x10023000 E:\SC\SC12.1\SCApplications\SNMP\Bin\JniUtils.dll
0x00320000 - 0x00332000 E:\SnmpIpmNativeTestDriver\MTFStubHelper.dll
0x00340000 - 0x0035B000 E:\SnmpIpmNativeTestDriver\MTFXMLFileAPI.dll
0x12000000 - 0x122B1000 e:\sc\sc12.1\bin\xerces-c_2_2_0D.dll
0x77DD0000 - 0x77E5D000 C:\WINDOWS\system32\ADVAPI32.dll
0x78000000 - 0x78086000 C:\WINDOWS\system32\RPCRT4.dll
0x10200000 - 0x1026C000 e:\sc\sc12.1\bin\MSVCRTD.dll
0x102A0000 - 0x102B7000 e:\sc\sc12.1\bin\MSVCIRTD.dll
0x5F800000 - 0x5F8E9000 e:\sc\sc12.1\bin\MFC42uD.DLL
0x77C70000 - 0x77CB0000 C:\WINDOWS\system32\GDI32.dll
0x77D40000 - 0x77DCC000 C:\WINDOWS\system32\USER32.dll
0x5F700000 - 0x5F746000 e:\sc\sc12.1\bin\MFCD42uD.DLL
0x5F500000 - 0x5F5C6000 e:\sc\sc12.1\bin\MFCO42uD.DLL
0x10480000 - 0x104FE000 e:\sc\sc12.1\bin\MSVCP60D.dll
0x15020000 - 0x15042000 e:\sc\sc12.1\bin\SCTraceLib.dll
0x6D510000 - 0x6D58D000 C:\WINDOWS\System32\dbghelp.dll
0x77C10000 - 0x77C63000 C:\WINDOWS\system32\msvcrt.dll
0x77C00000 - 0x77C07000 C:\WINDOWS\system32\VERSION.dll
0x00360000 - 0x0037D000 e:\sc\sc12.1\bin\SCFileManager.dll
0x76BF0000 - 0x76BFB000 C:\WINDOWS\System32\PSAPI.DLL
0x00420000 - 0x00580000 e:\sc\sc12.1\bin\BctCoreCL.dll
0x5D920000 - 0x5D929000 C:\WINDOWS\System32\RPCNS4.dll
0x71B20000 - 0x71B31000 C:\WINDOWS\system32\MPR.dll
0x71C20000 - 0x71C6E000 C:\WINDOWS\System32\NETAPI32.dll
0x71AB0000 - 0x71AC5000 C:\WINDOWS\System32\WS2_32.dll
0x71AA0000 - 0x71AA8000 C:\WINDOWS\System32\WS2HELP.dll
0x15000000 - 0x15012000 e:\sc\sc12.1\bin\CTEventLog.dll
0x773D0000 - 0x77BC2000 C:\WINDOWS\system32\SHELL32.dll
0x70A70000 - 0x70AD4000 C:\WINDOWS\system32\SHLWAPI.dll
0x771B0000 - 0x772D1000 C:\WINDOWS\system32\ole32.dll
0x77120000 - 0x771AB000 C:\WINDOWS\system32\OLEAUT32.dll
0x1F7A0000 - 0x1F7D6000 C:\WINDOWS\System32\ODBC32.dll
0x77340000 - 0x773CB000 C:\WINDOWS\system32\COMCTL32.dll
0x763B0000 - 0x763F5000 C:\WINDOWS\system32\comdlg32.dll
0x08000000 - 0x08138000 D:\Java\j2re1.4.2_03\bin\client\jvm.dll
0x76B40000 - 0x76B6C000 C:\WINDOWS\System32\WINMM.dll
0x5FD00000 - 0x5FD0D000 C:\WINDOWS\System32\MFC42LOC.DLL
0x71950000 - 0x71A34000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805\comctl32.dll
0x1F840000 - 0x1F857000 C:\WINDOWS\System32\odbcint.dll
0x5DAC0000 - 0x5DAC7000 C:\WINDOWS\System32\rdpsnd.dll
0x00FE0000 - 0x00FE7000 D:\Java\j2re1.4.2_03\bin\hpi.dll
0x01000000 - 0x0100E000 D:\Java\j2re1.4.2_03\bin\verify.dll
0x01010000 - 0x01029000 D:\Java\j2re1.4.2_03\bin\java.dll
0x01030000 - 0x0103D000 D:\Java\j2re1.4.2_03\bin\zip.dll
0x76C90000 - 0x76CB2000 C:\WINDOWS\system32\imagehlp.dll
Heap at VM Abort:
Heap
def new generation total 576K, used 132K [0x15050000, 0x150f0000, 0x15530000)
eden space 512K, 25% used [0x15050000, 0x15071250, 0x150d0000)
from space 64K, 0% used [0x150d0000, 0x150d0000, 0x150e0000)
to space 64K, 0% used [0x150e0000, 0x150e0000, 0x150f0000)
tenured generation total 1408K, used 0K [0x15530000, 0x15690000, 0x19050000)
the space 1408K, 0% used [0x15530000, 0x15530000, 0x15530200, 0x15690000)
compacting perm gen total 4096K, used 964K [0x19050000, 0x19450000, 0x1d050000)
the space 4096K, 23% used [0x19050000, 0x191410e0, 0x19141200, 0x19450000)
Local Time = Wed Aug 25 21:06:44 2004
Elapsed Time = 0
#
# HotSpot Virtual Machine Error : EXCEPTION_ACCESS_VIOLATION
# Error ID : 4F530E43505002EF
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# Java VM: Java HotSpot(TM) Client VM (1.4.2_03-b02 mixed mode)
#