MacOS Mojave(10.14)用gdb调试hotspot

2019-03-11  本文已影响0人  网易热孩子

前言

如果想要了解如何在此版本下编译openjdk可以 参考前文
执行全量的build可以使用如下命令:

make all

但是如果只是build hotspot。则如下即可:

make hostspot

在build目录的hotspot目录下可以看到build结果。

下边简单说说可能会遇到的问题。

gdb版本回退

默认情况下homebrew安装的gdb版本是已经大于8.1了。在此版本之上编译有点问题, 会出现如下的报错:

During startup program terminated with signal SIGTRAP, Trace/breakpoint trap.
version

解决方式是将gdb回退到8.0.1版本即可。

$ brew uninstall gdb
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c3128a5c335bd2fa75ffba9d721e9910134e4644/Formula/gdb.rb

gdbsign

极有可能出现下方的问题。

Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

这种情况需要手工嵌一个证书即可。可见此处的 qed 的回答即可。
https://stackoverflow.com/questions/11504377/gdb-fails-with-unable-to-find-mach-task-port-for-process-id-error
切记需要切换到root账号。

libjvm.dylib丢失

这种也不明白为什么就没这个文件。但是能发现在gdbTest目录是有这个文件的。尝试copy过来即可。

信号量

可能会出现下列异常

 Thread 3 received signal SIGSEGV, Segmentation fault.

不用太理会。这是jvm自身的signal处理机制。尝试continue即可。如果真的觉得很烦, 可以尝试修改 hotspot/variant-server/libjvm/hotspot 中的 init_gdb方法,将

handle SIGUSR1 nostop noprint
handle SIGUSR2 nostop noprint

修改为

handle SIGUSR1 nostop noprint
handle SIGUSR2 nostop noprint 
handle SIGSEGV pass noprint nostop

大功告成

enjoy it!

all
上一篇 下一篇

猜你喜欢

热点阅读