[讨论] 在Windows中构建OpenJDK8u已经很简单了

erdas_zhuang 2014-10-23
ZHH2009 写道
提示信息只是说windows相关的dll的pdb没找到,这个很正常的,除非你的windows也是可调试的。openjdk的明显提示Symbols loaded了呀。

你可以把错误输出到一个日志文件的
怎么输出:
引用

在Visual Studio左边的Solution Explorer窗口中右击jvm项目,
在弹出菜单中选择Properties,紧接着出来"jvm Property Pages"窗口,
点Configuration Properties -> Debugging
在Command 最后加上 >E:\log.txt 2>&1
就可以重定向了


I got an error dialog, saying "Unable to start problem '[***]build\windows-x86_64-normal-server-fastdebug\images\j2sdk-image\bin\java.exe > D:\log.txt 2>&1'. The system cannot find the file specified.

另外,你构建的是server版的jdk,
引用
windows-x86_64-normal-server-fastdebug

在“1. 生成Visual Studio项目 ”那里生成的是client版的jvm还是server?


我看了一下vs的项目设置,都是指向我曾经的64位jvm build,所以我觉得应该是server。

我前面的问题都是围绕你的文章里面的最后一步,“3. 调试HotSpot VM ”,我按F5出错,断点没有用啊。这个和jvm是client版本还是server版本有关系吗?

我今天重新创建了一个新的virtual machine,安装32位win7,然后报下面的错误(java.lang.OutOfMemoryError: Java heap space). 也就是因为这个问题,我才最后不得不用64的jdk7做bootstrap,然后不得不创建64位的openjdk8 server版本,因为client版本没有64位的。
我不知道你是如何解决这个(java.lang.OutOfMemoryError: Java heap space)问题的。不吝赐教,谢谢。
Generating HTML DTD file
[Parsed DTD html32 in 62ms]
Compiling 9185 files for BUILD_JDK

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space
        at com.sun.tools.javac.util.Position$LineMapImpl.build(Position.java:153)
        at com.sun.tools.javac.util.Position.makeLineMap(Position.java:77)
        at com.sun.tools.javac.parser.JavaTokenizer.getLineMap(JavaTokenizer.java:763)
        at com.sun.tools.javac.parser.Scanner.getLineMap(Scanner.java:127)
        at com.sun.tools.javac.parser.JavacParser.parseCompilationUnit(JavacParser.java:3130)
        at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:628)
        at com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:665)
        at com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:950)
        at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:855)
        at com.sun.tools.javac.main.Main.compile(Main.java:523)
        at com.sun.tools.javac.main.Main.compile(Main.java:381)
        at com.sun.tools.javac.main.Main.compile(Main.java:370)
        at com.sun.tools.javac.main.Main.compile(Main.java:361)
        at com.sun.tools.javac.Main.compile(Main.java:56)
        at com.sun.tools.javac.Main.main(Main.java:42)
CompileJavaClasses.gmk:333: recipe for target '/cygdrive/c/OpenJDK/jdk8u-dev/build/windows-x86-normal-client-fastdebug/jdk/classes/_the.BUILD_JDK_batch' failed
make[2]: *** [/cygdrive/c/OpenJDK/jdk8u-dev/build/windows-x86-normal-client-fastdebug/jdk/classes/_the.BUILD_JDK_batch] Error 3
BuildJdk.gmk:64: recipe for target 'classes-only' failed
make[1]: *** [classes-only] Error 2
/cygdrive/c/OpenJDK/jdk8u-dev//make/Main.gmk:115: recipe for target 'jdk-only' failed
make: *** [jdk-only] Error 2
ZHH2009 2014-10-23
引用

我前面的问题都是围绕你的文章里面的最后一步,“3. 调试HotSpot VM ”,我按F5出错,断点没有用啊。这个和jvm是client版本还是server版本有关系吗?

构建jdk时,32位如果指定了server版,在另外生成vs项目时,在32位上默认是client版的,client版的jvm肯定是和server版不一样的,client版没有编译C2编译器。

client版的jvm在vs中对应那个opto下的文件都有个红杠,就表示不包含C2编译器的代码。

引用

I got an error dialog, saying "Unable to start problem '[***]build\windows-x86_64-normal-server-fastdebug\images\j2sdk-image\bin\java.exe > D:\log.txt 2>&1'. The system cannot find the file specified.


是j2sdk-image\bin\java.exe没找到?

还是先解决为什么窗口一闪而过的问题,只有知道里面的错误提示信息才好判断错误原因是什么。

引用

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space

这多半是你内存不够了

另外,在虚拟机上构建jdk,我看到之前有网友说碰到不少问题,我不是在虚拟机上构建的,我的机器内存是4G,可用内存是2G多
ZHH2009 2014-10-23
erdas_zhuang 写道
ZHH2009 写道


你可以把错误输出到一个日志文件的
怎么输出:
引用

在Visual Studio左边的Solution Explorer窗口中右击jvm项目,
在弹出菜单中选择Properties,紧接着出来"jvm Property Pages"窗口,
点Configuration Properties -> Debugging
在Command 最后加上 >E:\log.txt 2>&1
就可以重定向了


I got an error dialog, saying "Unable to start problem '[***]build\windows-x86_64-normal-server-fastdebug\images\j2sdk-image\bin\java.exe > D:\log.txt 2>&1'. The system cannot find the file specified.





Sorry ,之前少输入个英文单词了,
是Command Arguments不是Command

">E:\log.txt 2>&1" 加在Command Arguments最后就会把错误信息重定向到log.txt
erdas_zhuang 2014-10-24
ZHH2009 写道
erdas_zhuang 写道
ZHH2009 写道


你可以把错误输出到一个日志文件的
怎么输出:
引用

在Visual Studio左边的Solution Explorer窗口中右击jvm项目,
在弹出菜单中选择Properties,紧接着出来"jvm Property Pages"窗口,
点Configuration Properties -> Debugging
在Command 最后加上 >E:\log.txt 2>&1
就可以重定向了


I got an error dialog, saying "Unable to start problem '[***]build\windows-x86_64-normal-server-fastdebug\images\j2sdk-image\bin\java.exe > D:\log.txt 2>&1'. The system cannot find the file specified.





Sorry ,之前少输入个英文单词了,
是Command Arguments不是Command

">E:\log.txt 2>&1" 加在Command Arguments最后就会把错误信息重定向到log.txt


把log dump to the file, and check the log file. It says "Error: loading: [***]\jdk8u-dev\hotspot\build\vs-i486\compiler1\debug\jvm.dll"
我查了一下那个目录, jvm.dll is there.

还有,我按照你的“在Windows平台构建与调试HotSpot.md” (https://github.com/codefollower/OpenJDK-Research/blob/master/hotspot/my-docs/%E5%9C%A8Windows%E5%B9%B3%E5%8F%B0%E6%9E%84%E5%BB%BA%E4%B8%8E%E8%B0%83%E8%AF%95HotSpot.md),也就是直接用java.exe inside JDK8就可以调试hotspot jvm.dll.

难道前面我编译j2sdk-image的java.exe不正确?
Thanks.
ZHH2009 2014-10-24
引用

The log file says "Error: loading: [***]\jdk8u-dev\hotspot\build\vs-i486\compiler1\debug\jvm.dll"
我查了一下那个目录,jvm.dll is there.


compiler1就是client版的JVM哈,

你在bash ./configure时使用--with-jvm-variants=client再编译一次吧

java.exe不属于HotSpot VM的,
java.exe属于jdk\bin


就算java.exe无法debug,
你不是在Threads.cpp文件里打断点了么,总会跳到那的。
ZHH2009 2014-10-24
erdas_zhuang 写道

还有,我按照你的“在Windows平台构建与调试HotSpot.md” (https://github.com/codefollower/OpenJDK-Research/blob/master/hotspot/my-docs/%E5%9C%A8Windows%E5%B9%B3%E5%8F%B0%E6%9E%84%E5%BB%BA%E4%B8%8E%E8%B0%83%E8%AF%95HotSpot.md),也就是直接用java.exe inside JDK8就可以调试hotspot jvm.dll.

难道前面我编译j2sdk-image的java.exe不正确?
Thanks.



这个是另一种办法,是不需要编译整个OpenJDK的,只需要单独编译HotSpot就可以了。

跟这个主贴说的内容是不一样的。
erdas_zhuang 2014-10-25
ZHH2009 写道
引用

The log file says "Error: loading: [***]\jdk8u-dev\hotspot\build\vs-i486\compiler1\debug\jvm.dll"
我查了一下那个目录,jvm.dll is there.


compiler1就是client版的JVM哈,

你在bash ./configure时使用--with-jvm-variants=client再编译一次吧
#我的机器是64位,没法用client这个参数, the default value for this jvm-variants is "server". I do not have the physical machine which has 32bit win7 with 4G RAM.

java.exe不属于HotSpot VM的,
java.exe属于jdk\bin
#Correct.

就算java.exe无法debug,
你不是在Threads.cpp文件里打断点了么,总会跳到那的。

#因为出了这个错,“Error: loading: [***]\jdk8u-dev\hotspot\build\vs-i486\compiler1\debug\jvm.dll”,所以跳不到那.
查了一下openjdk邮件列表,2013年5月就有人问了同样的问题,http://mail.openjdk.java.net/pipermail/hotspot-dev/2013-May/009742.html,只是没有人follow-up.
看来目前为止,我没法setup dev environment on 64 bit win7 machine.
I might need to switch to ubuntu machine.

Anyhow, still great thank-you for your help and this post.
ZHH2009 2014-10-25
邮件那个是没有pdb,如果你发现你构建后有diz之类的文件,把diz文件解压,里面就有pdb了

java.exe的diz文件在我的机器上的目录是:
build\windows-x86-normal-client-fastdebug\jdk\bin


我这里没有64位的windows7,所以无法重现你的问题。
erdas_zhuang 2014-10-28
终于,上周末重新思考一下,想想自己碰到的问题。试验了一下,招到了解决的方法了。

D:\VS2010\Common7\Tools\vsvars32.bat 适用于32位win7
对于64位,应该用C:\vs2010\VC\bin\amd64\vcvars64.bat
This should fix the problem. (of course, you need to install x64 vs2010.)

Also for the 32 bit win7 virtual machine, if you run into the issue of "java.lang.OutOfMemoryError: Java heap space", just increase the memory for this virtual machine by using PatchPae.zip (download it and run some cmd which comes with this zip file)

现在重新看看这个solution,真是很简单,还是要向版上的ZHH2009和R大多多学习。
最后感谢ZHH2009的热心答复!
Global site tag (gtag.js) - Google Analytics