使用vscode+gdb调试openjdk8的源码

        在这里想要记录一下自己在下载openjdk到编译再到使用vscode来debug源码的过整个过程,以及遇到的问题相关的记录

环境准备

1.安装虚拟机,lz这里是windows系统,选择安装VMware

2.安装Ubuntu系统,这里我选择的是1.6因为jdk1.8版本是有点老了,选择高的系统版本会不支持并且报错

3.下载jdk 1.8 ,从官网去下载,lz这里打算编译jdk1.8所以安装jdk1.8作为根bootjdk,记得配置好环境变量JAVA_HOME;当我们编译好后JAVA_HOME改成手动编译好的jdk的位置,例如我的是在

4.GitHub下载openjdk源码,GitHub - AdoptOpenJDK/openjdk-jdk8u: JDK8u mirror from mercurial

5. 执行bash ./configure --with-target-bits=64 --with-num-cores=8 --with-debug-level=slowdebug  --enable-debug-symbols,在这个过程中会发生很多问题,下面会一一列出

6. 执行 make all ZIP_DEBUGINFO_FILES=0 DISABLE_HOTSPOT_OS_VERSION_CHECK=ok,生成目标文件,这里要是make all哦,网上很多地方都是make images,我之前就因为这个走了很多弯路

7.安装vscode,这个直接从官网下载就可以了,需要安装相应的插件,如下图所示

 

8.准备好Test.java.javac 编译成class文件

public class Test {

    public static void main(String[] args) throws InterruptedException {

        System.out.println("hello world !");



        for (int i = 0; i < 1000000; i++) {

            System.out.println("睡眠开始" + i);

            Thread.sleep(2 * 60 * 1000);

            System.out.println("睡眠结束");

        }



        System.out.println("end");

    }

}

9.导入编译好的jdk源码,配置launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "cppdbg",
            "request": "launch",
            "name": "Debug",
            "program": "${workspaceFolder}/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java",
            "args": ["-cp","Test.class文件所在目录", "Test"],
            "stopAtEntry": true,
            "miDebuggerPath": "/usr/bin/gdb",
            //"additionalSOLibSearchPath": "${workspaceFolder}/build/linux-x86_64-normal-server-slowdebug/jdk/lib:${workspaceFolder}/build/linux-x86_64-normal-server-slowdebug/hotspot/linux_amd64_compiler2/debug",
            "cwd": "${workspaceFolder}",
            "environment": [
              //  {
              //     "name": "LD_LIBRARY_PATH",
              //      "value": "${workspaceFolder}/build/linux-x86_64-normal-server-slowdebug/hotspot/linux_amd64_compiler2/debug"
              //  }
            ],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [{
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": false
            }]
        }
    ]
}

 10.开始debug了,因为配置了"stopAtEntry": true,所以debug会停9程序入口点,main.c的main方法里面

遇到的问题

 1.编译问题,在执行bash ./configure的时候会又很多提示缺少什么,根据提示就可以解决了,但是我这次遇到一个freetype依赖问题,相关的包已经安装,bash configure 一直提示找不到让安装;产生这个问题的原因是:没有找到所需要的库文件"ft2build.h",该文件位置为/usr/include/freetype2/ft2build.h
解决方案:创建一个硬链接即可:sudo ln -s /usr/include/freetype2/ft2build.h /usr/include/

2.debug问题,在debug到r = ifn->CreateJavaVM(pvm, (void **)penv, &args);时提示gdb cannot execute next step,直接跳过之后堆栈信息很多unknow source,jni.cpp.thread.cpp里面的断点都是灰色空心的,(网上找了很多文章都说是文件被改了需要重新编译,然而我重现编译后依然不可以,后来从头到尾自己又理了一遍从编译到配置,包括每个配置项都认证的核对过是什么意思,在launch.json里加了LD_LIBRARY_PATH还是不行,其实相关的源文件是存在的,想起了编译的时候只加了 --with-debug-level=slowdebug,make images,于是重新编译带使用了上面5.6中的参数就可以了)

VSCode提供了集成的调试工具,其中包括对GDB的支持。要在VSCode使用GDB进行调试,首先需要配置调试器。可以通过安装C/C++插件来获得对GDB的支持。然后,按照以下步骤进行配置: 1. 打开VSCode并打开要调试的项目。 2. 在左侧的活动栏中,点击调试图标(调试镜像)以打开调试视图。 3. 在调试视图中,点击顶部工具栏中的"齿轮"图标,这将打开"launch.json"文件。 4. 在"launch.json"文件中,可以看到一个 "configurations" 数组,其中包含了不同的调试配置。在这里,我们需要添加一个GDB配置。 5. 在 "configurations" 数组中添加以下配置: ``` { "name": "GDB", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/your_program", "miDebuggerPath": "gdb", "miDebuggerArgs": "-g", "cwd": "${workspaceFolder}" } ``` 确保将 "your_program" 替换为你要调试的程序的路径。 6. 保存并关闭 "launch.json" 文件。 7. 现在,你可以在VSCode中点击调试视图左侧的绿色播放按钮来启动GDB调试器。 8. 在调试器启动后,你可以设置断点,单步执行代码,查看变量和堆栈等。 通过上述步骤,你就可以在VSCode使用GDB进行调试了。请确保你的项目已经正确配置,并且你已经正确安装了GDB。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [一文掌握vscode远程gdb调试](https://blog.csdn.net/zong596568821xp/article/details/124338072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值