用GDB调试java程序与修改Integer源码
gdb是c语言的调试工具,与java的jdb是同类工具。
我准备调试下hotspot,从java可执行文件开始调试,并执行下面的Test.java。
一、gdb调试
调试步骤:
1.进入java项目的运行目录,我的是/home/chengzhong/eclipse_workspace/test/bin文件夹
cd bin
2.gdb可调试的java文件,比如:
gdb /home/chengzhong/openjdk/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java
3.现在进入了gdb环境,再执行
set args test.Test
加了这行命令,相当于我们在命令行执行java test.Test
4.执行
run
是不是就能看到了Test.java的运行结果了?
进入Integer.java源码,再IntegerChache的static方法块里加入:System.out.println("in IntegerCache static");再编译make一下jdk.
再进入c语言eclipse,调试Test.java ,控制台打出来了。
但不行,因为debug模式编译的jdk没有生成jar,无法在eclipse里配置jdk.
那我就编译一个release版的吧。
./configure --with-target-bits=64 --with-boot-jdk=/home/chengzhong/openjdk/jdk-10
make
机器配置不高的同学可能会遇到和我一样的问题,编译途中,机器自动断电了。这是温度太高引起的,旁边放个风扇,风开大点就能解决问题。
错了,release的也不行,生成的文件一样。
我尝试了下make install,是可以生成,但不但会生成文件还会改变本地环境变量。最后我发现可以使用:make images来生成。
生成之后,再让java eclipse配置到images文件夹下的jdk。可以从控制台看到我们加的System.out.println的内容。
文/程忠 浏览次数:0次 2020-04-01 18:50:57
我准备调试下hotspot,从java可执行文件开始调试,并执行下面的Test.java。
package test; public class Test { public static void main(String[] args) { Integer n=3; System.out.println(n); n=10; System.out.println(n); } }
一、gdb调试
调试步骤:
1.进入java项目的运行目录,我的是/home/chengzhong/eclipse_workspace/test/bin文件夹
cd bin
2.gdb可调试的java文件,比如:
gdb /home/chengzhong/openjdk/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java
3.现在进入了gdb环境,再执行
set args test.Test
加了这行命令,相当于我们在命令行执行java test.Test
4.执行
run
是不是就能看到了Test.java的运行结果了?
二、两种Eclipse下调试修改Integer
我尝试给Test.java打断点,在这之前先得解决一个问题,希望gdb能进入java的断点。哈,这是不行的,java的断点用jdb命令才行。这就比较尴尬了。本来我想调试IntegerCache的初始化过程,看来现在是gdb不行,jdb也不行。
那我再试试再Integer.java中加入System.out.println("")这样的信息,来观察IntegerChache的初始化过程。进入Integer.java源码,再IntegerChache的static方法块里加入:System.out.println("in IntegerCache static");再编译make一下jdk.
再进入c语言eclipse,调试Test.java ,控制台打出来了。
但不行,因为debug模式编译的jdk没有生成jar,无法在eclipse里配置jdk.
那我就编译一个release版的吧。
./configure --with-target-bits=64 --with-boot-jdk=/home/chengzhong/openjdk/jdk-10
make
机器配置不高的同学可能会遇到和我一样的问题,编译途中,机器自动断电了。这是温度太高引起的,旁边放个风扇,风开大点就能解决问题。
错了,release的也不行,生成的文件一样。
我尝试了下make install,是可以生成,但不但会生成文件还会改变本地环境变量。最后我发现可以使用:make images来生成。
生成之后,再让java eclipse配置到images文件夹下的jdk。可以从控制台看到我们加的System.out.println的内容。
相关阅读
微信扫描-捐赠支持
加入QQ群-技术交流
评论:
↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑