感谢支持
我们一直在努力

Java虚拟机(HotSpot)GDB调试过程详解

准备

编译好的Hotspot虚拟机
Ubuntu 14.04下Java虚拟机(HOTSPOT)源代码编译步骤  http://www.linuxidc.com/Linux/2016-04/130484.htm:

GDB基本操作:
Linux编程基础——GDB(入门)与 Linux编程基础——GDB(设置断点) 见 http://www.linuxidc.com/Linux/2017-12/149081.htm

系统:
Ubuntu 14.04


调试步骤

可调试的虚拟机位置:

  • openjdk7:源代码目录

  • build-debug:编译后的二进制文件位置

  • build-debug/hotspot/outputdir/linux_i486_compiler1/jvmg:虚拟机位置

  • 如果按照Java虚拟机(HOTSPOT)源代码编译步骤进行代码编译,下面的操作之前,请切换到root用户。

解压缩调试符号:

务必要把虚拟机目录下的libjvm.diz里的内容解压到虚拟机所在目录,做一次就可以,不需要每次调试都解压
/home/zxf/openjdk7/build-debug/hotspot/outputdir/linux_i486_compiler1/jvmg的libjvm.diz解压到当前目录中,否则只能进行表层调试,像Threads::create_vm无法break into进去

调试前导入变量:
请将下面shell中/home/zxf/换成你自己的openjdk7源代码目录

export LD_LIBRARY_PATH=/home/zxf/openjdk7/build-debug/hotspot/outputdir/linux_i486_compiler1/jvmg/ 
export JAVA_HOME=/home/zxf/openjdk7/build-debug/j2sdk-image/
export CLASSPATH=.:/home/zxf/openjdk7/build-debug/j2sdk-image/lib:/home/zxf/openjdk7/build-debug/j2sdk-image/jre/lib

开始调试:
jvmg目录下的gamma文件就是虚拟机程序

设置断点:
注意下面这个断点设置一定要让gdb开始调试了即r命令后才能设置上。

b Threads::create_vm

进入核心函数cream_vm

GDB调试命令  http://www.linuxidc.com/Linux/2017-01/139028.htm

强大的C/C++ 程序调试工具GDB  http://www.linuxidc.com/Linux/2016-09/135171.htm

Linux GDB调试 详述 http://www.linuxidc.com/Linux/2016-11/137505.htm

使用 GDB 恢复堆栈信息  http://www.linuxidc.com/Linux/2017-07/145508.htm

使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm

GDB调试命令总结  http://www.linuxidc.com/Linux/2016-08/133988.htm

GDB调试工具入门  http://www.linuxidc.com/Linux/2016-09/135168.htm

使用GDB调试Python程序  http://www.linuxidc.com/Linux/2017-11/148329.htm

GDB 的详细介绍:请点这里
GDB 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149083.htm

赞(0) 打赏
转载请注明出处:服务器评测 » Java虚拟机(HotSpot)GDB调试过程详解
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏