MacOS Mojave(10.14)用gdb调试hotspot

前言

如果想要了解如何在此版本下编译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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • openjdk9u源码分析一:搭建环境 搭建环境可分两步,   1. 搭建jdk9u编译环境  2. ...
    码头军阅读 4,953评论 5 2
  • 程序调试的基本思想是“分析现象->假设错误原因->产生新的现象去验证假设”这样一个循环过程,根据现象如何假设错误原...
    Manfred_Zone阅读 16,746评论 0 26
  • 恭喜你,当你来到这个帖子, 说明pdb的调试功能已经开始满足不了你。 Gdb 在7.0+ 版本上已经支持Pytho...
    罗兆峰阅读 6,837评论 3 2
  • 爸妈的结合是通过媒人。说起媒人,在那个年代,可是个非常吃香的岗位。靠着一张能说会道的嘴,就能吃遍方圆几十里!爸妈的...
    清雅520阅读 455评论 0 2
  • 我妈是一个很唠叨的人。 自我回家以来, 她一直在唠叨, 一直在唠叨, 现在还在唠叨。 有时候真的很烦, 于是在心里...
    多萝西西里阅读 159评论 0 1

友情链接更多精彩内容