美文网首页
MacOS Mojave(10.14)用gdb调试hotspot

MacOS Mojave(10.14)用gdb调试hotspot

作者: 网易热孩子 | 来源:发表于2019-03-11 20:13 被阅读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

    相关文章

      网友评论

          本文标题:MacOS Mojave(10.14)用gdb调试hotspot

          本文链接:https://www.haomeiwen.com/subject/yqlipqtx.html