首页 > 其他分享 >GDB & KGDB调试

GDB & KGDB调试

时间:2024-03-29 14:33:58浏览次数:26  
标签:KGDB 断点 GDB gdb 内核 CONFIG 调试

GDB底层 -- ptrace() -> sys_ptrace()
https://zhuanlan.zhihu.com/p/336922639

2.3 GDB断点原理

在某行代码处打一个断点,其实就是将该行代码的汇编 (是指令级别!!!)用INT 3中断指令代替,原来的代码被保存到“断点链表”中。

KGDB 调试原理

安装 KGDB 调试环境需要为Linux内核应用 KGDB 补丁,补丁实现的gdb远程调试所需要的功能包括命令处理、陷阱处理及串口通讯3个主要的部分。 KGDB 补丁的主要作用是在Linux内核中添加了一个调试Stub。调试Stub是Linux内核中的一小段代码,提供了运行gdb的开发机和所调试内核之间的一个媒介。gdb和调试stub之间通过gdb串行协议进行通讯。gdb串行协议是一种基于消息的ASCII码协议,包含了各种调试命令。当设置断点时, KGDB 负责在设置断点的指令前增加一条trap指令,当执行到断点时控制权就转移到调试stub中去。此时,调试stub的任务就是使用远程串行通信协议将当前环境传送给gdb,然后从gdb处接受命令。gdb命令告诉stub下一步该做什么,当stub收到继续执行的命令时,将恢复程序的运行环境,把对CPU的控制权重新交还给内核。

使用:
https://cloud.tencent.com/developer/article/1418056

qemu调试

https://quard-star-tutorial.readthedocs.io/zh-cn/latest/ext1.html

配置

修改内核配置

在linux 5.10版本上,KGDB已经受支持,因此仅需要修改内核配置就可以打开此功能。

CONFIG_KGDB

配置CONFIG_KGDB=y,以启用kgdb功能。

CONFIG_GDB_SCRIPTS

配置CONFIG_GDB_SCRIPTS=y,这样在内核编译时会在根目录生成vmlinux-gdb.py文件,这个python脚本需要在gdb调试时加载,以此提供一些供gdb调试内核的扩展命令,对于调试外部ko文件带来极大的方便。

CONFIG_DEBUG_INFO

配置CONFIG_DEBUG_INFO=y,gdb调试内核需要从vmlinx中加载相关符号信息,但默认的内核编译选项没有-g选项,因此该elf文件将不含有调试信息,调试时看不到源码,仅能做汇编级别的调试跟踪,因此需要配置该选项,打开调试信息(打开后会增大内核文件)。

CONFIG_DEBUG_INFO_DWARF4

配置CONFIG_DEBUG_INFO_DWARF4=y,如果不启用这个选项内核调试信息将不包含DWARF4信息,只能进行一些backtarce的查看,而无法debug变量,打开该选项可以使用(打开后会进一步增大内核文件)。

CONFIG_STRICT_KERNEL_RWX/CONFIG_STRICT_MODULE_RWX

配置CONFIG_STRICT_KERNEL_RWX/CONFIG_STRICT_MODULE_RWX选项关闭,这个选项的存在会对内核代码段进行写保护,因此在使用kgdb时如果进行添加断点操作,目标系统如果不支持硬件断点机制,就必须改写内核代码段来使用断点指令触发软件断点达到目的,而该选项的存在会导致断点指令无法写入,因此需要关闭(关闭后会增加内核所在内存被破坏风险)。

修改内核启动参数

进行如下修改:
- bootargs = "root=/dev/vda2 rw console=ttyS0 earlycon=sbi";
+ bootargs = "root=/dev/vda2 rw console=ttyS0 earlycon=sbi nokaslr kgdboc=ttyS1,115200 kgdbwait";

nokaslr

KASLR是一种安全性的手段,会让代码运行在随机化的地址上,传入nokaslr会关闭这个功能以此方便调试的时候地址匹配vmlinx中的符号信息,不过并不是所有arch都支持KASLR功能的,也许在一些架构上就不支持KASLR,这里传不传这个选项也就无所谓了。

kgdboc

kgdboc用来指定内核调试信息从哪里输出,这里我们使用了ttyS1串口输出,未来gdb便需要连接到对应串口来接收调试数据。

kgdbwait

添加该参数可以让内核启动时准备好数据后等待gdb接入再继续启动内核。

启动调试

完成修改后重新编译内核和设备树文件就可以开始内核调试了,由于我们使用的是qemu模拟器,因此需要打开三个终端。

虚拟机调试目标机

https://blog.csdn.net/weixin_38832162/article/details/115347640

标签:KGDB,断点,GDB,gdb,内核,CONFIG,调试
From: https://www.cnblogs.com/ycjstudy/p/18103775

相关文章

  • 利用宏进行调试
    万能的宏在调试代码的时候,如果想一次性输出好多变量的值和它们对应的名字,又不行写太长的printf,怎么办?namespaceDEBUG{template<typenameT>void_debug(constchar*format,Tt){cerr<<format<<'='<<t<<endl;}template<......
  • Win32堆的调试支持
    Win32堆的调试支持  为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试。 1:堆尾检查(HeapTailCheck)HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出。2:释放检查(HeapFreeCheck)在释放堆块时进行检查,防止释放同一个堆块。3:参数检查,对传递给堆的各种......
  • 瑞芯微-I2S | 音频驱动调试基本命令和工具-基于rk3568-2
    基于Linux嵌入式设备常用调试方法很多,本文一口君把调试语音用到的工具和方法给大家做一个简单的介绍。1.procfs、sysfsLinux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的......
  • golang调试利器 dlv 的使用
    安装Github地址: https://github.com/go-delve/delve/如果是在本地调试,直接通过goinstall命令将其安装到本地的$GOPATH/bin下即可goinstallgithub.com/go-delve/delve/cmd/dlv@latest容器环境下由于不一定支持go,需要先安装go语言环境,会比较麻烦,可以直接将本地下载好......
  • openGauss/MogDB数据库安装部署之xlog目录设置
    openGauss/MogDB数据库安装部署之xlog目录设置本文出处:https://www.modb.pro/db/176915关于xlogxlog文件是一个记录事务日志的文件,它记录数据库系统中所有的更改操作,当发生主机电源故障或其他导致服务器崩溃的服务器故障时,由于xlog日志包含了关于已经执行的每个事务的足......
  • openGauss/MogDB-3.0.0 dcf测试(非om安装)
    openGauss/MogDB-3.0.0dcf测试(非om安装)本文出处:https://www.modb.pro/db/402037IP地址...LERDER...FOLLOWER...FOLLOWER一、安装openGauss安装依赖包yuminstall-ybzip2bzip2-develcurllibaio创建用户、组并创建目录groupaddomma-g20001useraddomm......
  • openEuler20.03操作系统上安装部署MogDB2.1.1
    openEuler20.03操作系统上安装部署MogDB2.1.1本文出处:https://www.modb.pro/db/378319openEuler操作系统上安装mogdb:下载openEuler镜像文件:openEuler-20.03-LTS-x86_64-dvd.iso可以到各镜像源网站下载:例如:清华源下载地址:https://mirrors.tuna.tsinghua.edu.cn/openeule......
  • MogDB 使用向量化执行引擎进行调优
    MogDB使用向量化执行引擎进行调优本文出处:https://www.modb.pro/db/430318MogDB数据库支持行执行引擎和向量化执行引擎,分别对应行存表和列存表。一次一个batch,读取更多数据,节省IO。batch中记录较多,CPUcache命中率提升。Pipeline模式执行,函数调用次数少。一次处理一......
  • MogDB 使用样本数据集Mogila
    MogDB使用样本数据集MogilaMogDB提供了一个样本数据集Mogila,本数据集借鉴了适用于MySQL的Sakila示例数据库。Sakila最初由MySQLAB文档团队的MikeHillyer开发,其目的是提供一个可用于书籍、教程、文章、样本等示例的标准schema。Mogila数据集是一个关于DVD出租店......
  • mogdb里xlog相关的几个参数
    openGauss/MogDB3.0闪回恢复测试本文出处:https://www.modb.pro/db/411368介绍闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR等手段找回已提交的数据库修改,恢复......