内核调试番外篇 - KDB的介绍与简单使用
来源:互联网 发布:杭州java培训机构 编辑:程序博客网 时间:2024/06/11 14:43
From: 内核&调试调试
1、什么是 KDB?
kdb是一个Linux系统的内核调试器,它是由SGI公司开发的遵循GPL许可证的开放源码调试工具。kdb嵌入在Linux内核中,为内核&&驱动程序员提供调试手段。它适合于调试内核空间的程序代码,譬如进行设备驱动程序调试,内核模块的调试等。
2、为什么要用KDB?
Bug处处有,不同人的编码思维,以及架构思维!总是会导致Bug的出现,Bug就像小强一样,永远杀不完!也许今天你的架构能支持当前业务,可是明天突然流量暴增,你那套架构就已经是Bug了!
对程序员而言,Bug远远没有到达上述那种高深的地步,架构有架构师!程序员往往只需要保证我们自己的那一亩三分田地的代码是OK的!不管业务需求,不管风吹雨打!有的程序员每天都在push代码,可是正儿八斤高效的代码极其少,有的程序员甚至可笑的说,我怎么着也是写过xx万行代码的大牛!笑而不语。
在我看来,高效代码就是结合需求在不断的压力测试中慢慢改进,这样的代码才是优秀代码!还有一个就是判断一个程序员是否算是程序员的时候,就应该问他解决过的Bug,以及解决Bug的途径!没错,调试工具这里就显得很重要~ 一个好的程序员必是一个好的调试工程师!同样的问题,好的程序员往往10分钟就能搞定,而Low的程序员只会说:”这不可能啊、我的代码没问题啊、见鬼了、我的代码肯定没问题”之类的话!
KDB做为一款内核级别的调试器,对于内核程序员 && 驱动程序员的帮助非常大,KDB的主要优点包括它允许进行内存地址和寄存器修改,并且可以设置堆栈,我本人最喜欢的一个功能就是反汇编了。关于KDB一些使用心得我也会在后续慢慢写出来!
3、开始使用KDB
内核在3.x中已经默认自带KDB了,所以我们只需要开启KDB相关的宏即可,再也不需要像2.6.x的时候去下载KDB的补丁了!
打开宏CONFIG_KGDB_KDB
,重新编译内核即可!
3.1、启动KDB
echo g > /proc/sysrq-trigger
3.2、命令介绍
a.基本调试命令
b.内存操作命令
第一个参数为地址显示行数(缺省为4行),每多一行就会地址偏移0x10!
第二个参数是以几进制显示,支持的有(8,10,16)|
|md[1 - 8]| vaddr [line-count [output-radix]]| md4 0xffffffffbfc00400 1 16
结果:
00000003 0000000| 此系列命令为md的扩展,md后面的常数表示显示的内存按照常数个字节常数个字节的显示!|
|mds| vaddr [line-count [output-radix]]| mds 0xffffffff8097c0a0| 以符号的形式显示内存内容,每行只显示一个符号!|
|mm| vaddr contents| mm 0xffffffffbfc00400 0x1| 修改内存地址的内容|
|mdp| vaddr | mdp vaddr |mdp 0x1fc00400| 读取物理地址|
c.堆栈操作命令
d.断点操作命令
*表示清除所有的断点
bd bpnum bd 0 使断点#0无效 be bpnum be 0 激活断点#0e.系统命令&&寄存器操作
f.反汇编命令
4、调试小技巧
5、Q & A
1、有没有键盘快捷键可以直接进入KDB?
有. CTRL + Break..
2、
By: Keven - 点滴积累
- 内核调试番外篇 - KDB的介绍与简单使用
- 内核调试番外篇 - KDB的介绍与简单使用
- 配置串口使用KDB调试Linux内核
- 时间序列数据库KDB 与Java结合使用介绍 -- 2 基于KDB Java的写入实现
- 时间序列数据库KDB 与Java结合使用介绍 -- 3 基于KDB JDBC的写入实现
- kdb 调试内核
- 使用kdb和kgdb调试Linux内核(1)
- 使用kdb和kgdb调试Linux内核(2)
- 使用kdb和kgdb调试Linux内核(3)
- 使用KDB调试工具
- 内核级调试工具kdb
- Linux内核调试工具:Kdb的编译安装
- 时间序列数据库KDB 与Java结合使用介绍 -- 1 KDB Java代码解读
- Linux内核调试工具:Kdb应用指南
- linux 内核调试--KDB 入门指南
- 用kdb调试linux内核驱动
- 用kdb调试linux内核驱动
- 龙芯1B开启内核KDB调试
- 编程题#4:计算整数平方和(C++程序设计第10周)
- hdu 1097 A hard puzzle
- 20160130.CCPP体系详解(0009天)
- Java基础06 组合
- java中的注解
- 内核调试番外篇 - KDB的介绍与简单使用
- 数组
- 20160131.CCPP体系详解(0010天)
- c++类的成员变量使用普通变量还是指针
- Java基础07 包
- 20160201.CCPP体系详解(0011天)
- 内存学习
- 调试番外篇 - KGDB环境搭建与使用
- 编程题#5:计算数组的低3位之和(C++程序设计第10周)