Chinaunix首页 | 论坛 | 博客
  • 博客访问: 786475
  • 博文数量: 127
  • 博客积分: 2669
  • 博客等级: 少校
  • 技术积分: 1680
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-23 11:39
文章分类

全部博文(127)

文章存档

2014年(5)

2013年(19)

2012年(25)

2011年(9)

2010年(25)

2009年(44)

分类: LINUX

2010-07-19 18:25:43

    kdb调试内核

1.下载kdb补丁
ftp://oss.sgi.com/www/projects/kdb/download/v4.4/
在ustor的os内核2.6.26-2,补丁
kdb-v4.4-2.6.26-x86-2
kdb-v4.4-2.6.26-common-2

2.编译内核
需要修改配置参数
确保.config文件选项有如下:
CONFIG_KDB=y
CONFIG_KDB_MODULES=n
CONFIG_KDB_OFF=n
CONFIG_KDB_CONTINUE_CATASTROPHIC=0
CONFIG_KDB_USB=y
CONFIG_KDB_KDUMP=y
CONFIG_KALLSYMS=y
CONFIG_FRAME_POINTER=y

3.开始kdb功能
要控制KDB,可以通过grub
kdb=on    开启kdb
kdb=off   关闭kdb
kdb=early 刚进入系统时就暂停并进入kdb
kdb=on-nokey 任何键盘按键都不能触发kdb

或者通过proc(注意,要用root 权限)[CONFIG_KDB_OFF有关]
echo '0' > /proc/sys/kernel/kdb            关闭kdb
echo '1' > /proc/sys/kernel/kdb            开启kdb
echo '2' > /proc/sys/kernel/kdb            任何键盘按键都不能触发kdb

4.测试kdb时候开启

cat /proc/sys/kernel/kdb 为1,表示开启

备注:按下 pause键就进入kdb了,OK,我按下pause键, cap lock确实开始狂闪了,然后再按什么键鼠标都没反应了,死机了

5. ustor修改
(1) 修改menu.lst文件,增加一个段
root (hd0,0)
kernel /boot/vmlinuz-2.6.26.2-kdb root=/dev/hda1 kdb=on init=1
initrd /boot/initrd.img
(2)在/etc/rc.d中增加rc1.d目录,以及相应的连接[ustor把单用户裁减了]

(3)修改/etc/inittab
id:1:initdefault:
su:S06:once:/sbin/sulogin
1:12345:respawn:/sbin/agetty tty1 9600
2:12345:respawn:/sbin/agetty tty2 9600
(4)使用root用户登录,然后按pause键进入kdb交互界面

6.命令简介
内存显示和修改
    md,mdr,mm 和 mmW

显示内存
md 0x00000000c000000 15

寄存器显示和修改
    rd,rm 和 ef

断点
    断点命令有 bp 、 bc 、 bd 、 be 和 bl 。

bp 命令以一个地址/符号作为参数,它在地址处应用断点。当遇到该断点时则停止执行并将控制权交予 KDB。该命令有几个有用的变体。
bpa 命令对 SMP 系统中的所有处理器应用断点。 bph 命令强制在支持硬件寄存器的系统上使用它。 bpha 命令类似于 bpa 命令,
差别在于它强制使用硬件寄存器。
bd 命令禁用特殊断点。它接收断点号作为参数。该命令不是从断点表中除去断点,而只是禁用它。断点号从 0 开始,根据可用性顺序分配给断点。
be 命令启用断点。该命令的参数也是断点号。
bl 命令列出当前的断点集。它包含了启用的和禁用的断点。
bc 命令从断点表中除去断点。它以具体的断点号或 * 作为参数,在后一种情况下它将除去所有断点


堆栈跟踪

主要的堆栈跟踪命令有 bt 、 btp 、 btc 和 bta 。
bt 命令设法提供有关当前线程的堆栈的信息。它可以有选择地将堆栈帧地址作为参数。如果没有提供地址,那么它采用当前寄存器来回溯堆栈。
否则,它假定所提供的地址是有效的堆栈帧起始地址并设法进行回溯。如果内核编译期间设置了 CONFIG_FRAME_POINTER 选项,那么就用帧指
针寄存器来维护堆栈,从而就可以正确地执行堆栈回溯。如果没有设置 CONFIG_FRAME_POINTER ,那么 bt 命令可能会产生错误的结果。

btp 命令将进程标识作为参数,并对这个特定进程进行堆栈回溯。
btc 命令对每个活动 CPU 上正在运行的进程执行堆栈回溯。它从第一个活动 CPU 开始执行 bt ,然后切换到下一个活动 CPU,以此类推。
bta 命令对处于某种特定状态的所有进程执行回溯。若不带任何参数,它就对所有进程执行回溯。可以有选择地将各种参数传递给该命令。
将根据参数处理处于特定状态的进程

详情可以参考值:
    Documentation/kdb下的文本文件.

        
 
阅读(4760) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~