初始堆大小无效:-Xms128M -Xmx512M -Xss1024K -Dlog4j.debug ...?

时间:2012-12-23 12:59:25

标签: java windows 32bit-64bit windbg

我的设置:

  • Windows 64位
  • Java应用程序加载32位本机模块
  • 可以使用32位Java(jdk1.6.0_29)和以下命令行在调试器外运行良好 - “-Xms128M -Xmx512M -Xss1024K -Dlog4j.debug ...”(为简洁而修剪)

如果我想调试本机模块,问题就会出现。因此,我使用以下powershell命令行触发64位windbg:

windbg -logo c:\dumps\dbg.log -QY -awow64exts -c "!sw;bu $entry;g;g" "$env:JAVA_HOME\bin\java.exe" $Params

$Params与用于在调试器外部运行它的完全相同的参数。

调试器启动,但会话非常短:

Microsoft (R) Windows Debugger Version 6.12.0002.633 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: "c:\Program Files (x86)\Java\jdk1.6.0_29\bin\java.exe" "-Xms128M -Xmx512M -Xss1024K -Dlog4j.debug -Dlog4j.configuration=file:../conf/log4j.xml -Ddozer.configuration=file:../conf/config.properties -jar bootstrapper.jar com.shunra.bootstrapper.guice.Bootstrapper"
Symbol search path is: C:\dev\shunra\DriverProxy\CloudAPI\CLOUDAPI\Profile\Stratus;C:\dev\shunra\DriverProxy\LocalDriverProxy\Profile;C:\dev\shunra\SharedModules\cJSON\lib\win32\Profile;C:\dev\shunra\SharedModules\curl\lib\win32\Profile;C:\dev\shunra\SharedModules\DataStruct\lib\win32\profile;C:\dev\shunra\SharedModules\GraphSetup\lib\win32\profile;C:\dev\shunra\SharedModules\multikey_lookup\lib\win32\profile;C:\dev\shunra\SharedModules\ShunraAPICommon\lib\win32\Profile;C:\dev\shunra\SharedModules\ShunraAPIEmulation\lib\win32\Profile;C:\dev\shunra\SharedModules\ShunraAPIParsers\lib\win32\Profile;C:\dev\shunra\SharedModules\ShunraAPIRest\lib\win32\Profile;C:\dev\shunra\SharedModules\ShunraUtils\lib\win32\profile;C:\dev\shunra\SharedModules\ShunraXercesUtils\lib\win32\profile;C:\dev\shunra\SharedModules\SNetXMLBuilder\lib\win32\profile;C:\dev\shunra\SharedModules\StormEngine\lib\win32\profile;C:\dev\shunra\SharedModules\xerces-c-2.80\Build\Win32\VC10\Profile;C:\dev\shunra\SharedModules\XMLControl\lib\win32\profile;srv*Z:\Symbols*http://msdl.microsoft.com/download/symbols
Executable search path is: 
ModLoad: 00000000`00400000 00000000`00424000   java.exe
ModLoad: 00000000`77540000 00000000`776e9000   ntdll.dll
ModLoad: 00000000`77720000 00000000`778a0000   ntdll32.dll
ModLoad: 00000000`74da0000 00000000`74ddf000   C:\Windows\SYSTEM32\wow64.dll
ModLoad: 00000000`74d40000 00000000`74d9c000   C:\Windows\SYSTEM32\wow64win.dll
ModLoad: 00000000`74d30000 00000000`74d38000   C:\Windows\SYSTEM32\wow64cpu.dll
(684.e30): Break instruction exception - code 80000003 (first chance)
Processing initial command '!sw;bu LocalDriverProxy!Java_com_shunra_vcat_core_emulation_LocalDriverProxy_StartEmulation;g;g'
ntdll!LdrpDoDebuggerBreak+0x30:
00000000`775ecb60 cc              int     3
0:000> !sw;bu LocalDriverProxy!Java_com_shunra_vcat_core_emulation_LocalDriverProxy_StartEmulation;g;g
Switched to 32bit mode
ModLoad: 76e60000 76f7f000   WOW64_IMAGE_SECTION
ModLoad: 00000000`75300000 00000000`75410000   WOW64_IMAGE_SECTION
ModLoad: 00000000`76e60000 00000000`76f7f000   NOT_AN_IMAGE
ModLoad: 00000000`77190000 00000000`7728a000   NOT_AN_IMAGE
ModLoad: 00000000`75300000 00000000`75410000   C:\Windows\syswow64\kernel32.dll
ModLoad: 00000000`752b0000 00000000`752f7000   C:\Windows\syswow64\KERNELBASE.dll
ModLoad: 00000000`769a0000 00000000`76a40000   C:\Windows\syswow64\ADVAPI32.dll
ModLoad: 00000000`76710000 00000000`767bc000   C:\Windows\syswow64\msvcrt.dll
ModLoad: 00000000`76390000 00000000`763a9000   C:\Windows\SysWOW64\sechost.dll
ModLoad: 00000000`75410000 00000000`75500000   C:\Windows\syswow64\RPCRT4.dll
ModLoad: 00000000`74e00000 00000000`74e60000   C:\Windows\syswow64\SspiCli.dll
ModLoad: 00000000`74df0000 00000000`74dfc000   C:\Windows\syswow64\CRYPTBASE.dll
(684.e30): WOW64 breakpoint - code 4000001f (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
ModLoad: 74860000 748ac000   C:\Windows\SysWOW64\apphelp.dll
ModLoad: 00000000`7c340000 00000000`7c396000   c:\Program Files (x86)\Java\jdk1.6.0_29\jre\bin\msvcr71.dll
ModLoad: 00000000`6d8a0000 00000000`6db4f000   c:\Program Files (x86)\Java\jdk1.6.0_29\jre\bin\client\jvm.dll
ModLoad: 00000000`76610000 00000000`76710000   C:\Windows\syswow64\USER32.dll
ModLoad: 00000000`76c20000 00000000`76cb0000   C:\Windows\syswow64\GDI32.dll
ModLoad: 00000000`74ee0000 00000000`74eea000   C:\Windows\syswow64\LPK.dll
ModLoad: 00000000`76190000 00000000`7622d000   C:\Windows\syswow64\USP10.dll
ModLoad: 00000000`747e0000 00000000`74812000   C:\Windows\SysWOW64\WINMM.dll
ModLoad: 00000000`76af0000 00000000`76b50000   C:\Windows\SysWOW64\IMM32.DLL
ModLoad: 00000000`76b50000 00000000`76c1c000   C:\Windows\syswow64\MSCTF.dll
ModLoad: 00000000`74860000 00000000`748ac000   C:\Windows\SysWOW64\apphelp.dll
ModLoad: 00000000`6d850000 00000000`6d85c000   c:\Program Files (x86)\Java\jdk1.6.0_29\jre\bin\verify.dll
ModLoad: 00000000`6d3d0000 00000000`6d3ef000   c:\Program Files (x86)\Java\jdk1.6.0_29\jre\bin\java.dll
ntdll!NtTerminateProcess+0xa:
00000000`775915da c3              ret

Finito! Java终止在控制台窗口中打印此短消息:

Invalid initial heap size: -Xms128M -Xmx512M -Xss1024K -Dlog4j.debug -Dlog4j.configuration=file:../conf/log4j.xml -Ddozer.configuration=file
:../conf/config.properties -jar bootstrapper.jar com.shunra.bootstrapper.guice.Bootstrapper
Could not create the Java virtual machine.

任何人都可以对此有所了解吗?

修改

根据下面的一些评论,我倾向于认为我的PowerShell脚本有问题。

事实上,正如Jon Skeet建议我尝试使用相同的-XYZ参数在调试器中运行HelloWorld java应用程序并且它有效。然后是Codo的评论,这让我觉得有些东西在我的PowerShell代码中被腐烂了。

这是:

$env:JAVA_HOME='c:\Program Files (x86)\Java\jdk1.6.0_29'
$Params="-Xms128M -Xmx512M -Xss1024K -Dlog4j.debug -Dlog4j.configuration=file:../conf/log4j.xml -Ddozer.configuration=file:../conf/config.properties -jar bootstrapper.jar com.shunra.bootstrapper.guice.Bootstrapper"
windbg -logo c:\dumps\dbg.log -QY -awow64exts -c "!sw;g;g" "$env:JAVA_HOME\bin\java.exe" $Params

$Params似乎作为单个字符串传递给java进程。好的,我扩展它:

windbg -logo c:\dumps\dbg.log -QY -awow64exts -c "!sw;g;g" "$env:JAVA_HOME\bin\java.exe" -Xms128M -Xmx512M -Xss1024K -Dlog4j.debug -Dlog4j.configuration=file:../conf/log4j.xml -Ddozer.configuration=file:../conf/config.properties -jar bootstrapper.jar com.shunra.bootstrapper.guice.Bootstrapper

现在我得到了一个由java打印出来的致命错误:

Exception in thread "main" java.lang.NoClassDefFoundError: /debug
Caused by: java.lang.ClassNotFoundException: .debug
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: .debug.  Program will exit.

它对我的生活有什么期望?

EDIT2

根据Codo的建议改变了命令行:

windbg -logo c:\dumps\dbg.log -QY -awow64exts -c "!sw;g;g" "$env:JAVA_HOME\bin\java.exe" -Xms128M -Xmx512M -Xss1024K -Dlog4j.debug=true -Dlog4j.configuration=file:../conf/log4j.xml -Ddozer.configuration=file:../conf/config.properties -jar bootstrapper.jar com.shunra.bootstrapper.guice.Bootstrapper

现在错误是:

Exception in thread "main" java.lang.NoClassDefFoundError: /debug=true
Caused by: java.lang.ClassNotFoundException: .debug=true
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: .debug=true.  Program will exit.

这意味着-Dlog4j.debug=true被解释为类名,而不是JVM选项。我不明白发生了什么。

0 个答案:

没有答案