1、背景介绍

Qemu模拟ARM64使用GDB调试linux kernel一文中,向大家介绍了使用Qemu模拟ARM64芯片,通过GDB来调试linux kernel,但是使用的是GDB命令模式,调试过程复杂,操作也不方便。本文向大家介绍通过VS code 来调试linux kernel内核,结合源代码实现可视化的单步调试。

2、参数配置

VS code 中调试C/C++,需要安装 C/C++ 插件支持;

在VS code 中打开linux kernel源代码工作区,在工作区添加调试的配置信息:运行->添加配置

在配置文件 launch.json 中添加配置:

"configurations": [
    {
        "name": "gdb调试",
        "type": "cppdbg",
        "targetArchitecture": "arm64",
        "request": "launch",
        "program": "${workspaceFolder}/vmlinux",
        "args": [],
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": false,
        "MIMode": "gdb",
        "miDebuggerPath": "/usr/bin/gdb-multiarch",
        "miDebuggerServerAddress": "localhost:1234",
        "setupCommands": [
            {
                //"text": "set arch aarch64",
                "text": "set architecture aarch64",
                "ignoreFailures": false
            },
            {
                "description": "为 gdb 启用整齐打印",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            },
            {
                "description":  "将反汇编风格设置为 Intel",
                "text": "-gdb-set disassembly-flavor intel",
                "ignoreFailures": true
            }
        ]
    }
    ]

3、运行调试

3.1、运行模拟器

首先运行模拟器,qemu启动命令记得添加“-s -S”,详细请参考:Qemu模拟ARM64使用GDB调试linux kernel

3.2、VScode调试

linux kernel启动的C语言入口函数在 init/main.c 文件中的start_kernel函数,我们在此函数处添加断点信息,然后按“F5”启动调试:

如上图所示,调试启动后,暂停在start_kernel 断点处,左侧可以查看当前的状态,包括CPU的寄存器信息,可以实现单步运行,跟踪linux kernel运行过程。

3.3 自动启动模拟器

上述步骤中,我们是通过手动来启动模拟器,这里介绍通过vscode 的任务,通过调试指令触发启动模拟器。

首先配置任务:终端->配置任务

在配置任务的task.json文件中输入如下配置信息:

    "tasks": [
        {
            //task的名称
            "label": "run_qemu",
            "type": "shell",
            "isBackground": true,
            //启动qemu脚本的地址
            "command": "bash xxx/start_qemu.sh",
            "args": [
            ]
        }
    ]

启动调试时首先启动任务,在调试配置文件launch.json 文件新增配置:

     "preLaunchTask": "run_qemu",

这样在F5启动调试时,首先启动"run_qemu"任务,由任务来启动qemu模拟器。

4、后记

通过一系列的文章,从VScode 的介绍,到使用VScode 调试Linux kernel代码,介绍了如何借助VS code来方便阅读理解linux源代码,俗话说:工欲善其事必先利其器,有了VS code这等利器,希望大家能够更好的理解linux源代码。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐