VS code 可视化调试Linux kernel内核

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源代码。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VS Code 提供了一个名为 Remote Development 的扩展,可以让用户远程开发和调试应用程序。通过这个扩展,你可以使用 VS Code 在本地编辑和调试远程计算机上的代码。 以下是使用 VS Code 远程调试 Linux C 程序的基本步骤: 1. 在远程机器上安装 gdbserver 在 Linux 机器上安装 gdbserver,可以使用以下命令: ``` sudo apt-get install gdbserver ``` 2. 在远程机器上编译 C 程序 在远程机器上编译 C 程序,并确保在编译过程中加入 -g 参数以生成调试信息。 3. 在本地机器上打开 VS Code 在本地机器上打开 VS Code,使用 Remote Development 扩展连接到远程机器。 4. 在本地机器上安装 C/C++ 插件 在本地机器上安装 C/C++ 插件,该插件可以帮助你在 VS Code调试 C 程序。 5. 配置 VS Code 的 launch.json 文件 在 VS Code 中打开 launch.json 文件,配置 "program"、"remoteMachine" 和 "miDebuggerPath" 参数。例如: ``` { "version": "0.2.0", "configurations": [ { "name": "(gdb) Attach", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/a.out", "remoteMachine": "your-remote-machine", "miDebuggerPath": "/usr/bin/gdb", "miDebuggerArgs": "-q", "linux": { "MIMode": "gdb" }, "windows": { "MIMode": "gdb" }, "pipeTransport": { "pipeCwd": "${workspaceFolder}", "pipeProgram": "ssh", "pipeArgs": [ "-T", "-x", "-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null", "user@your-remote-machine" ] } } ] } ``` 6. 启动调试VS Code 中按下 F5 启动调试VS Code 将连接到远程机器并启动 gdbserver。你可以使用 VS Code调试工具来设置断点、单步执行等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

module_exit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值