• 调试HotSpot源代码


    之前的文章在Ubuntu 16.04上编译OpenJDK8的源代码 已经介绍过在Ubuntu上编译OpenJDK8的源代码,这一篇将介绍在Ubuntu上调试OpenJDK8源代码的2种方式。 

    在Linux上常用GDB调试C/C++源代码。使用GDB运行如上实例生成的Class文件,具体命令如下:

    gdb --args ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test
    

    进入GDB后,输入如下命令: 

    break java.c:JavaMain
    continue
    

    第一条命令表示在源文件java.c的JavaMain函数入口处设置断点;第二条命令表示让中断的程序继续运行,直到运行完程序后退出GDB,并在终端打印”Hello World!“信息。
    下面介绍一些常用的GDB命令,如下表所示。 

    命令

    描述

    backtrace(bt)

    查看各级函数调用及参数

    finish

    连续运行到当前函数返回为止,然后停下来等待命令

    frame(f) n

    从当前栈帧移到到n栈帧

    info(i) locals

    查看当前栈帧局部变量的值

    list(l)

    列出源代码,接着上次的位置往下列,每次列10行ll

    list(l)  行号

    列出从指定行开始的源代码

    list(l) 函数名

    列出指定的函数的源代码

    next(n)

    执行下一行语句

    print(p)

    打印表达式的值,通过表达式可以修改变量的值或者调用函数

    quit(q)

    退出gdb调试环境

    step(s)

    执行下一行语句,如果有函数调用则进入到函数中

    start

    开始执行程序,停在main函数第一行语句前面等待命令

    break(b) 行号

    在指定行设置断点

    break 函数名

    在指定函数的开头设置断点

    break ... if ...

    设置条件断点

    continue(c)

    从当前位置开始连续运行程序

    delete breakpoints 断点号

    删除断点

    display 变量名

    跟踪查看指定变量名的变量,每次停下来都显示它的值

    disable breakpoints 断点号

    禁用断点

    enable 断点号

    启用断点

    info(i) breakpoints

    查看当前设置了哪些断点

    run(r)

    从头开始连续运行程序

    undisplay 跟踪显示号

    取消跟踪显示

    watch

    设置观察点

    info(i) watchpoints

    查看当前设置了哪些观察点

    x

    从某个位置开始打印存储单元的内容,全部当成字节来看,

    而不区分哪个字节属于哪个变量

     

    1.下载安装Eclipse并安装C/C++插件

    在 https://www.eclipse.org/downloads 网站上下载支持Ubuntu 64位版本操作系统的Eclipse,笔者下载的压缩包名称为eclipse-java-neon-3-linux-gtk-x86_64.tar.gz,通过如下命令解压后得到eclipse目录。命令如下:​

    tar -zxvf eclipse-java-neon-3-linux-gtk-x86_64.tar.gz
    

    切换到eclipse目录后,运行如下命令启动Eclipse。命令如下: 

    ./eclipse &
    

    启动Eclipse后,单击help菜单项,选择Eclipse Marketplace选项后,弹出Eclipse Marketplace对话框,搜索"c++"找到Eclipse C++ IDE..安装。安装完成后就可以创建及导入C/C++项目到Eclipse中了。

    2.导入HotSpot源代码

    单击help菜单项,选择new->Other...后,在弹出的New对话框中选择Makefile Project with Existing Code,然后单击“Next”,添写相关的信息,如下图所示。​

     

    设置完成后单击“Finish”即可。

    3.配置及调试源代码

    在HotSpot项目上右击,选择Debug As -> Debug Configurations...,在弹出的Debug Configurations对话框中,选择C/C++ Application后,右击,在弹出的菜单中选择New Configuration后,在右侧的Main选项卡中配置相关的信息,如下图所示。

     切换到Arguments选项卡, 在Program arguments文本框中输入虚拟机运行时的参数,这里运行之前的实例,具体参数如下:

    com.test/Test
    

    切换到Environment选项卡, 添加变量:​  

    JAVA_HOME=/home/mazhi/workspace/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/
    CLASSPATH=.:/home/mazhi/workspace/project/bin
    

    CLASSPATH指定Test.class文件所在的目录。设置完相关信息后,单击Apply进行保存。  

    相关文章的链接如下:

    1、在Ubuntu 16.04上编译OpenJDK8的源代码 

    2、调试HotSpot源代码

    3、HotSpot项目结构 

    4、HotSpot的启动过程 

    5、HotSpot二分模型 (1)

    6、HotSpot的类模型(2)  

    7、HotSpot的类模型(3) 

    关注公众号,有HotSpot源码剖析系列文章!  

  • 相关阅读:
    springboot缓存注解——@CacheEvict
    springboot缓存注解——@CachePut
    springboot缓存注解——@Cacheable
    缓存环境
    JSR107缓存规范
    springboot自定义starter
    Linux 最常用命令整理,建议收藏!
    Spring Boot 2.2.0 正式发布,支持 JDK 13!
    厉害了,阿里史上最重要的三段代码…
    代码写成这样,老夫无可奈何!
  • 原文地址:https://www.cnblogs.com/mazhimazhi/p/13217159.html
Copyright © 2020-2023  润新知