jni -> c++ -> c#을 clr로 call할때 실행시 덤프파일이 떨어집니다.

bumworld의 이미지

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

hultul의 이미지

.NET framework은 설치시 특이하게 여러 버전 디렉토리를 생성하고 파일(DLL등)들이 나뉘어 설치됩니다.
제 경우 3.0을 설치했을 때, bumworld님과 같이 v2.0.50727\mscorjit.dll 파일이 생성되었습니다.
따라서 버전 mismatch 문제가 아닐 가능성이 높아 보입니다.

문제 원인 좀더 좁히기 위해 "Java->CLR" call이 아닌 "일반 native->CLR" 테스트를 해보시면 어떨까요?
이 문제가 Java와 CLR을 동시에 쓰기 때문에 발생하는 문제인 지 여부를 판단 할 수 있을 것 같습니다.

그리고 혹시나 하는 생각에 여쭤보는데, CLR platform과 관련된 초기화는 해주시고 method call을 하신거죠?

코더에서 프로그래머까지

코더에서 프로그래머까지

bumworld의 이미지

동일한 코드로 일반 native에서 CLR로 C#을 호출하는 테스트는 정상적으로 진행이 됐습니다.

버전 문제도 아니라면 뭔가 다른 문제이겠네요..

그런데 "CLR platform과 관련된 초기화는 해주시고" 이부분이 무슨 말씀이신지 모르겠습니다.

제가 닷넷쪽은 영~잼병이라서요..ㅠ.ㅠ

함수는 static으로 만들어서 StartSE::StartSE_DLL::Main();

이렇게 호출했습니다.

java jni로 호출할때는 문제가 안생겼구요..

java jni로 호출할대 문제가 발생했습니다.

hultul의 이미지

저도 .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 생성/초기화 작업이 필요할 것 같습니다.

코더에서 프로그래머까지

코더에서 프로그래머까지

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.