jni -> c++ -> c#을 clr로 call할때 실행시 덤프파일이 떨어집니다.
C#으로 만들어진것을 c++에서 call하고 그 c++을 java에서 jni로 call합니다.
그런데 c++에서 c# call하는 함수를 호출하면 덤프파일이 떨어집니다.
물론 실행도 안되구요..
여러개의 함수가 있는데 c# call하는 함수에서만 에러가 발생하는것으로보아
호출은 정상적으로 되고 있고 c#을 call할때 문제가 발생하는듯 합니다.
호출하는 함수들중에서 c# 호출하는 c++의 함수만 주석처리해서 테스트하면
정상적으로 jni로 호출 잘 되구요.
0x79060000 - 0x790bb000 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll
이부분을 보니 닷넷프레임웍 2.0 버전의 모듈을 call하네요..ㅠ.ㅠ
(닷넷 프레임웍은 버전별로 전부 설치되어 있습니다.)
clr은 3.5부터 지원하는데 2.0을 call해서 발생하는 문제같네요..
흐~~어찌해야 할지...2.0을 삭제할려고해도 삭제도 안되구요..
되는게 없군요...
프로그램은 visualstudio 2008로 했구요 프로젝트 설정도 닷넷프레임웍 3.5를 사용하도록 셋팅했습니다.
전혀 java->c++->c# 전혀 방법이 없는걸까요?
도움 부탁드립니다.
-----------------------------------------------------------------
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# Internal Error (0xe0434f4d), pid=6032, tid=484
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_17-b04 mixed mode, sharing)
# Problematic frame:
# C [kernel32.dll+0x12aeb]
#
--------------- T H R E A D ---------------
Current thread (0x003c5d90): JavaThread "main" [_thread_in_native, id=484]
siginfo: ExceptionCode=0xe0434f4d, ExceptionInformation=0x80070002
Registers:
EAX=0x0006ea10, EBX=0xe0434f4d, ECX=0x00000000, EDX=0x00000028
ESP=0x0006ea0c, EBP=0x0006ea60, ESI=0x0006ea9c, EDI=0x0008c320
EIP=0x7c812aeb, EFLAGS=0x00000202
Top of Stack: (sp=0x0006ea0c)
0x0006ea0c: 0006ea98 e0434f4d 00000001 00000000
0x0006ea1c: 7c812aeb 00000001 80070002 02000038
0x0006ea2c: 0006ea3c 79e8006c 0006ea44 02000038
0x0006ea3c: 0006ea48 79e806cf 79330cb4 0006ea58
0x0006ea4c: 79eda7ef 79317310 0000012f 0006ea68
0x0006ea5c: 79eda816 0006eac0 79eda99c e0434f4d
0x0006ea6c: 00000001 00000001 0006ea98 e9831946
0x0006ea7c: 00000000 036756b4 0006eb4c 00033000
Instructions: (pc=0x7c812aeb)
0x7c812adb: 8d 7d c4 f3 a5 5f 8d 45 b0 50 ff 15 10 15 80 7c
0x7c812aeb: 5e c9 c2 10 00 85 ff 0f 8e 36 93 ff ff 8b 55 fc
Stack: [0x00030000,0x00070000), sp=0x0006ea0c, free space=250k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [kernel32.dll+0x12aeb]
C [mscorwks.dll+0x6a99c]
C [mscorwks.dll+0xc9ec4]
C [mscorwks.dll+0x261813]
C [mscorjit.dll+0x2ea6]
C [mscorjit.dll+0x2fa9]
C [mscorjit.dll+0x33e8]
C [mscorjit.dll+0x43a1]
C [mscorjit.dll+0x44d6]
C [mscorjit.dll+0x465c]
C [mscorjit.dll+0x5b8e]
C [mscorjit.dll+0x5d33]
C [mscorjit.dll+0x6448]
C [mscorwks.dll+0x15722c]
C [mscorwks.dll+0x1572c5]
C [mscorwks.dll+0x157338]
C [mscorwks.dll+0x1570ad]
C [mscorwks.dll+0x156e6f]
C [mscorwks.dll+0x111eb]
C [mscorwks.dll+0x113ab]
C 0x02cc2d6e
C 0x02cc32c1
j kr.co.blueshift.SolidEdgeMacroDll.macroStart()V+0
j HelloWorld.main([Ljava/lang/String;)V+14
v ~StubRoutines::call_stub
V [jvm.dll+0x87434]
V [jvm.dll+0xdfcee]
V [jvm.dll+0x87305]
V [jvm.dll+0x8e547]
C [javaw.exe+0x14c5]
C [javaw.exe+0x317f]
C [kernel32.dll+0x17067]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j kr.co.blueshift.SolidEdgeMacroDll.macroStart()V+0
j HelloWorld.main([Ljava/lang/String;)V+14
v ~StubRoutines::call_stub
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
0x00a80ab0 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=5384]
0x00a7f7c8 JavaThread "CompilerThread0" daemon [_thread_blocked, id=1160]
0x00a918b0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=4412]
0x003cf8a0 JavaThread "Finalizer" daemon [_thread_blocked, id=6044]
0x003ce440 JavaThread "Reference Handler" daemon [_thread_blocked, id=4824]
=>0x003c5d90 JavaThread "main" [_thread_in_native, id=484]
Other Threads:
0x00a52610 VMThread [id=1176]
0x00a81de0 WatcherThread [id=1428]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
Heap
def new generation total 576K, used 198K [0x22ae0000, 0x22b80000, 0x22fc0000)
eden space 512K, 38% used [0x22ae0000, 0x22b11ad0, 0x22b60000)
from space 64K, 0% used [0x22b60000, 0x22b60000, 0x22b70000)
to space 64K, 0% used [0x22b70000, 0x22b70000, 0x22b80000)
tenured generation total 1408K, used 0K [0x22fc0000, 0x23120000, 0x26ae0000)
the space 1408K, 0% used [0x22fc0000, 0x22fc0000, 0x22fc0200, 0x23120000)
compacting perm gen total 8192K, used 372K [0x26ae0000, 0x272e0000, 0x2aae0000)
the space 8192K, 4% used [0x26ae0000, 0x26b3d240, 0x26b3d400, 0x272e0000)
ro space 8192K, 67% used [0x2aae0000, 0x2b042dd8, 0x2b042e00, 0x2b2e0000)
rw space 12288K, 47% used [0x2b2e0000, 0x2b8905f0, 0x2b890600, 0x2bee0000)
Dynamic libraries:
0x00400000 - 0x0040d000 D:\develop\sdk\j2sdk150\bin\javaw.exe
0x7c930000 - 0x7c9cb000 C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c930000 C:\WINDOWS\system32\kernel32.dll
0x77f50000 - 0x77ff8000 C:\WINDOWS\system32\ADVAPI32.dll
0x77d80000 - 0x77e12000 C:\WINDOWS\system32\RPCRT4.dll
0x77ef0000 - 0x77f01000 C:\WINDOWS\system32\Secur32.dll
0x77cf0000 - 0x77d80000 C:\WINDOWS\system32\USER32.dll
0x77e20000 - 0x77e69000 C:\WINDOWS\system32\GDI32.dll
0x77bc0000 - 0x77c18000 C:\WINDOWS\system32\MSVCRT.dll
0x762e0000 - 0x762fd000 C:\WINDOWS\system32\IMM32.DLL
0x62340000 - 0x62349000 C:\WINDOWS\system32\LPK.DLL
0x73f80000 - 0x73feb000 C:\WINDOWS\system32\USP10.dll
0x6d750000 - 0x6d8ee000 D:\develop\sdk\j2sdk150\jre\bin\client\jvm.dll
0x76af0000 - 0x76b1b000 C:\WINDOWS\system32\WINMM.dll
0x6d310000 - 0x6d318000 D:\develop\sdk\j2sdk150\jre\bin\hpi.dll
0x76ba0000 - 0x76bab000 C:\WINDOWS\system32\PSAPI.DLL
0x6d720000 - 0x6d72c000 D:\develop\sdk\j2sdk150\jre\bin\verify.dll
0x6d390000 - 0x6d3ad000 D:\develop\sdk\j2sdk150\jre\bin\java.dll
0x6d740000 - 0x6d74f000 D:\develop\sdk\j2sdk150\jre\bin\zip.dll
0x10000000 - 0x1000e000 D:\develop\workspace\Jni_dll\CLR_DLL.dll
0x79000000 - 0x79046000 C:\WINDOWS\system32\mscoree.dll
0x10200000 - 0x10323000 C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\MSVCR90D.dll
0x02d10000 - 0x02d69000 C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456\msvcm90d.dll
0x76970000 - 0x76aad000 C:\WINDOWS\system32\ole32.dll
0x77e70000 - 0x77ee6000 C:\WINDOWS\system32\SHLWAPI.dll
0x79e70000 - 0x7a400000 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
0x78130000 - 0x781cb000 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.3053_x-ww_b80fa8ca\MSVCR80.dll
0x7d5a0000 - 0x7dd9d000 C:\WINDOWS\system32\shell32.dll
0x77160000 - 0x77263000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll
0x5c820000 - 0x5c8ba000 C:\WINDOWS\system32\comctl32.dll
0x305e0000 - 0x305f6000 C:\Program Files\Kaspersky Lab\Kaspersky Anti-Virus 7.0\miscr3.dll
0x30480000 - 0x3048e000 C:\Program Files\Kaspersky Lab\Kaspersky Anti-Virus 7.0\fssync.dll
0x790c0000 - 0x79bb7000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\mscorlib\6d667f19d687361886990f3ca0f49816\mscorlib.ni.dll
0x79060000 - 0x790bb000 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll
0x5e3a0000 - 0x5e42d000 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\diasymreader.dll
0x68000000 - 0x68036000 C:\WINDOWS\system32\rsaenh.dll
0x7a440000 - 0x7abc5000 C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\80978a322d7dd39f0a71be1251ae395a\System.ni.dll
VM Arguments:
jvm_args: -Djava.library.path=D:/develop/workspace/Jni_dll -Djava.library.path=D:/develop/workspace/Jni_dll
java_command: HelloWorld
Launcher Type: SUN_STANDARD
Environment Variables:
JAVA_HOME=D:\develop\sdk\j2sdk6
PATH=D:\develop\sdk\j2sdk6\bin;D:\develop\dll_lib;C:\XEClient\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\APM_Setup\Server\Apache\bin;C:\APM_Setup\Server\MySQL5\bin;C:\APM_Setup\Server\PHP5;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\IVT Corporation\BlueSoleil\Mobile;C:\WINDOWS\Microsoft.NET\Framework\v3.5;C:\Program Files\IDM Computer Solutions\UltraEdit\;C:\Program Files\UniUSB\Common
USERNAME=bumworld
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 11, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows XP Build 2600 Service Pack 3
CPU:total 2 (cores per cpu 2, threads per core 1) family 6 model 15 stepping 11, cmov, cx8, fxsr, mmx, sse, sse2
Memory: 4k page, physical 2097151k(1666268k free), swap 4194303k(3049124k free)
vm_info: Java HotSpot(TM) Client VM (1.5.0_17-b04) for windows-x86, built on Nov 10 2008 01:37:41 by "java_re" with MS VC++ 6.0
버전 문제가 아닐 가능성이 높습니다
.NET framework은 설치시 특이하게 여러 버전 디렉토리를 생성하고 파일(DLL등)들이 나뉘어 설치됩니다.
제 경우 3.0을 설치했을 때, bumworld님과 같이 v2.0.50727\mscorjit.dll 파일이 생성되었습니다.
따라서 버전 mismatch 문제가 아닐 가능성이 높아 보입니다.
문제 원인 좀더 좁히기 위해 "Java->CLR" call이 아닌 "일반 native->CLR" 테스트를 해보시면 어떨까요?
이 문제가 Java와 CLR을 동시에 쓰기 때문에 발생하는 문제인 지 여부를 판단 할 수 있을 것 같습니다.
그리고 혹시나 하는 생각에 여쭤보는데, CLR platform과 관련된 초기화는 해주시고 method call을 하신거죠?
코더에서 프로그래머까지
코더에서 프로그래머까지
일반 native에서 CLR 을 호출하는 테스트는 정상적으로 진행이 됐습니다.
동일한 코드로 일반 native에서 CLR로 C#을 호출하는 테스트는 정상적으로 진행이 됐습니다.
버전 문제도 아니라면 뭔가 다른 문제이겠네요..
그런데 "CLR platform과 관련된 초기화는 해주시고" 이부분이 무슨 말씀이신지 모르겠습니다.
제가 닷넷쪽은 영~잼병이라서요..ㅠ.ㅠ
함수는 static으로 만들어서 StartSE::StartSE_DLL::Main();
이렇게 호출했습니다.
java jni로 호출할때는 문제가 안생겼구요..
java jni로 호출할대 문제가 발생했습니다.
저도 .NET에 문외한입니다 ^^
저도 .NET에 문외한이긴 합니다만, Java와 같은 VM 기반이기 때문에 필요한 작업이 있을 것이라 생각됩니다.
즉, heap/GC, runtime, JIT 초기화 등, VM 초기화 작업이 필요하리라 생각됩니다.
Java 같은 경우 JNI_CreateJavaVM() 에서 이러한 작업을 수행하여 VM instance를 생성하는데, native에서 Java를 call하려면 반드시 먼저 JNI_CreateJavaVM()를 호출해야 합니다.
물론 "native->Java" 호출이 아닌 일반 Java application이라면 main()이 수행되기 전 내부적으로 VM이 알아서 해줍니다.
.NET framework도 VM이 manage할 수 있는 환경이 되려면, 먼저 VM instance 생성/초기화 작업이 필요할 것 같습니다.
코더에서 프로그래머까지
코더에서 프로그래머까지
댓글 달기