Skip to content

Debug openjdk riscv in vscode local mode

zifeihan edited this page Sep 26, 2021 · 2 revisions

使用 vscode 本地模式对 openjdk-riscv 进行调试

说明:

此文档作为 使用GDB在QEMU用户模式中进行远程调试 的扩展,使用 vscode 本地模式对 openjdk-riscv 进行调试。

前置要求:

  1. 该文档作为 使用GDB在QEMU用户模式中进行远程调试 的图形化调试扩展,在进行以下步骤之前,应能在本地先完成 使用GDB在QEMU用户模式中进行远程调试

  2. 在本地安装 vscode

  3. 在 vscode 中导入被调试的 openjdk-riscv 源码目录

  4. 在 vscode 中添加 debug 配置项,并编辑配置文件(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": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
             // GDB调试地址,端口号需要和 在QEMU启动程序时,通过 -g 指定的端口号保持一致
            "miDebuggerServerAddress": "localhost:33334",
            
            // 程序启动入口,注意按照编译时指定的路径修改
            "program": "/usr/local/plct/jdk11u/build/linux-riscv32-normal-core-slowdebug/jdk/bin/java", 
            
            // GDB 调试参数
            "args": ["-version"], 
            "stopAtEntry": false,
            "cwd": ".",
            "environment": [],
            "externalConsole": false,
            
            // 添加动态库路径,注意按照编译时指定的路径修改
            "additionalSOLibSearchPath": "/usr/local/plct/jdk11u/build/linux-riscv32-normal-core-slowdebug/jdk/lib:/usr/local/plct/jdk11u/build/linux-riscv32-normal-core-slowdebug/jdk/lib/jli:/usr/local/plct/jdk11u/build/linux-riscv32-normal-core-slowdebug/jdk/lib/server",
            "MIMode": "gdb",
            
            // 设置使用该版本GDB进行调试
            "miDebuggerPath": "/usr/local/plct/riscv32/bin/riscv32-unknown-linux-gnu-gdb",
            // "miDebuggerPath": "/usr/bin/gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

调试方法:

  1. 按照 使用GDB在QEMU用户模式中进行远程调试 中使用QEMU启动程序的方法:进入到构建好的JDK镜像的bin目录下,然后在后台使用QEMU执行java -version,如:
$ cd /path/to/jvm/openjdk-11.0.9-internal/bin
$ /path/to/qemu/bin/qemu-riscv32 -L /path/to/riscv32/sysroot -g 33334 ./java -version

​ 注意:/path/to/xxx 需要按照编译时指定的路径修改

  1. 在QEMU上启动openjdk后,即可使用vscode的调试功能

    调试方法:在相应文件上打断点,F5或者点击左侧debug图标,根据需要进行单步调试或者切换线程调试。

    切换线程:切换进程如果不能鼠标左键点击左边进程栏的进程进行切换时,可以在命令行下输入命令-exec t 2进行切换。

调试效果:

image-20210926165501751

其他调试方法:

  1. 使用GDB进行调试参考: 使用GDB在QEMU用户模式中进行远程调试

  2. 使用vscode remote-ssh参考:使用vscode remote-ssh对OpenJDK-RISCV进行调试