首页 > 技术文章 > 编译,调试JVM过程中的各种问题(血泪史)

lqlqlq 2020-05-21 16:13 原文

希望能帮到有需要的人,不要像我一样花费了许多时日

 

问题1:

com.jetbrains.cidr.execution.debugger.backend.gdb.GDBDriver$GDBCommandException: Error creating process /cygdrive/f/jdk8u/jdk8u/build/linuxR/jdk/bin/java, (error 193).

我在centos 7.6 上用 gcc4 编译出了jvm的代码,但是把代码拷贝到win10,用Clion调试,报上面错误。

 

 

根本原因没有找到,应该是linux编译出来的产物在win环境下无法兼容。

 

于是转ubuntu,在ubuntu上编译,ubuntu试了最新版本18.x 和 比较老版本12.x 和 适中版本16.x

结果:

  18.x的问题:

   在18.x上,前期准备都正常,但是到 make images 编译的时候,会报 All warnings are treated as errors。网上查是要把 Makefile 的 Werror 选项删除。

      但是在我的项目Makefile中没有找到这个选项,怀疑是gcc的版本太新。想降级 gcc 又找不到合适的 apt 源 , 于是用了旧的 ubuntu 12.x版本。

  12.x的问题:

   在12.x上,版本太久,以至于在用 apt 下载依赖的时候报 : dpkg 无法识别 tar.xz 文件。(contains ununderstood data member xxx.tar.xz),转用中间版本16.x

  最终在16.x上完成 

问题2:

  apt 安装依赖问题。我是个ubuntu小白,不知道 apt 用法,一步一步的摸索,解决了不少问题。

  1.无法定位依赖包 ( unable to locate package )

    可能是没有合适的 apt 源, apt 源是提供文件下载的。可以用 sudo gedit /etc/apt/sources.list 增加国内源(阿里云的比较好用)

    如果是安装libX11库,可以试一下把X改成小写x 。这真的是......

  2.出现类似

    xxx :

      aaa(xxx依赖的包)

      bbb(xxx依赖的包)

  这种情况,我的情况是因为下载某个包(xxx)要依赖的包(aaa, bbb)太新了,无法下载 这个包(xxx),所以把 aaa 和 bbb 都卸载掉,然后再安装xxx,这是我的办法,因为我的虚拟机上没装什么,只供参考,千万不要不顾自己的情况随便照着我的来。  

 

问题3:

  Debug 时,Clion的左下方的调用堆栈都是 <Unknown>,去看一下Debugger的GDB,会发现有 No Source File Named XXX 的错误。

  这时候要找到 libjvm.diz ,(可在项目中搜索)然后解压到各自的当前目录,这个压缩包里有debug的信息。

问题4:

  下载源码问题。注意,要用 Mercurial 的 hg 命令下载代码才可以用 get_source.sh , 因为需要通过他下载一些依赖。(或者你本身就有这些依赖)

  Mercurial 下载过程总是网络中断,可以采用分段下载, 就是 hg -r 1 clone xxx,之后 hg update -r 版本号 , 最后 hg update

  get_source.sh其实也是多个 hg 指令, 所以我分开来 手动输入 hg 各自分段下载,解决了网络中断问题。

  

推荐阅读