深入学习main方法(上)

77 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

上节我们成功编译了JDK,上节文章也是为这节准备的,我的文章都是循序渐进的,目的就是让大家能够明白,以后就不再提了哈。

代码准备

public class TestMain {
    public static void main(String[] args) {
        System.out.println("main-thread:"+Thread.currentThread().getName());
        Thread.currentThread().setName("thread-main");
        TestMain testMain = new TestMain();
        testMain.startThread();
    }

    private void startThread() {
        Thread thread = new Thread(() -> {
            int i = 3;
            while (i < 3) {
                System.out.println(Thread.currentThread().getName());
                i++;
            }
        });
        thread.setName("child-thread");
        thread.start();
    }
}

调试工具gdb

系统是linux的,所以需要一个调试工具。先执行这个命令:sudo rpm -qa | grep gdb,看有没有。

我这有了就不装了。 image.png

如果没有需自行安装。

找到编译目录

这个目录下有我们编译好的jdk,目录跟常规jdk是相同的。 image.png

我们使用java-version 命令来看看:

image.png

这个是普通的jdk,那我们昨天编译完成了,怎么看我们是否编译成功呢?,就进上面的那个目录,然后执行以下命令:./java -version,可以看到openjdk的字样。

image.png

编译java文件

接着需要编译一下java文件

image.png

然后使用gdb java命令进入gdb,看到下面的界面就是进来了。

image.png

然后设置一个参数 set args,这是java后面的参数,比如执行的时候需要放置java 参数,比如类名称,然后敲一个start

image.png

看到断点打到地方了嘛?我们找一下对应的文件:

image.png

然后我们使用list命令查看一下这个代码:

image.png

是不是一样的?然后我们用n让断点往下走:

image.png

到这个方法,写不完了,后续再写: