引言:
Linux内核调试器内幕
原文地址:[url]http://www-900.ibm.com/developerWorks/cn/linux/l-kdbug/index.shtml[/url]
内容:
[size=18:6ddc15f4ad]入门
初始化并设置环境变量
激活KDB
KDB命...
摘要:
如题,最好比较全,而且速度又快.
akron 回复于:2003-09-11 16:00:10
就事介绍一个资源比较丰富的网站
akron 回复于:2003-09-12 12:26:05
????????????????
贴上以后大家都方便吗!
尤其是对新手来说。
raullpq 回复于:2003-09-12 12:33:32
www.rpmfind.net找rpm包
http://linuxtoday.com/de......
摘要:
都放在我的服务器上了,大家要下的快下,说不定什么时候我就删除了
redhat press - red hat linux networking and system administration.pdf
this book is divided into five parts. each part covers a specific area of functionality in a typical red hat linux syste......
Linux 内核调试器内幕zt
linux 内核调试器内幕
【相关文章:
挖哈哈哈哈哈哈!关于CS服务起的问题解决】 【扩展阅读:
[GTK+] 显示动画gif文件】原文地址:[url]http://www-900.ibm.com/developerworks/cn/linux/l-kdbug/index.shtml[/url]
【扩展信息:
【FAQ】RPM软件包使用常见问题】 内容:
[size=18:6ddc15f4ad]入门
初始化并设置环境变量
激活 kdb
kdb 命令
技巧与诀窍
结束语
参考资料[/size:6ddc15f4ad]
[size=18:6ddc15f4ad]kdb 入门指南[/size:6ddc15f4ad]
hariprasad nellitheertha(nharipra@in.ibm.com)
软件工程师,ibm
2003 年 9 月
调试内核问题时,能够跟踪内核执行情况并查看其内存与数据结构是非常有用的。linux 中的内置内核调试器 kdb 提供了这种功能。在本文中您将了解如何使用 kdb 所提供的功能,以及如何在 linux 机器上安装与设置 kdb。您还将熟悉 kdb 中可以使用的命令以及设置与显示选项。
linux 内核调试器(kdb)允许您调试 linux 内核。这个恰如其名的工具实质上是内核代码的补丁,它允许高手访问内核内存与数据结构。kdb 的主要优点之一就是它不需要用另一台机器进行调试:您可以调试正在运行的内核。
设置一台用于 kdb 的机器需要花费一些工作,因为需要给内核打补丁并进行重新编译。kdb 的用户应当熟悉 linux 内核的编译(在一定程度上还要熟悉内核内部机理),但是如果您需要编译内核方面的帮助,请参阅本文结尾处的参考资料一节。
在本文中,我们将从有关下载 kdb 补丁、打补丁、(重新)编译内核以及启动 kdb 方面的信息着手。然后我们将了解 kdb 命令并研究一些较常用的命令。最后,我们将研究一下有关设置与显示选项方面的一些详细信息。
入门
kdb 项目是由 silicon graphics 维护的(请参阅参考资料以获取链接),您需要从它的 ftp 站点下载与内核版本有关的补丁。(在编写本文时)可用的最新 kdb 版本是 4.2。您将需要下载并应用两个补丁。一个是“公共的”补丁,包含了对通用内核代码的更改,另一个是特定于体系结构的补丁。补丁可作为 bz2 文件获取。例如,在运行 2.4.20 内核的 x86 机器上,您会需要 kdb-v4.2-2.4.20-common-1.bz2 与 kdb-v4.2-2.4.20-i386-1.bz2。
这里所提供的所有示例都是针对 i386 体系结构与 2.4.20 内核的。您将需要根据您的机器与内核版本进行适当的更改。您还需要拥有 root 许可权以执行这些操作。
将文件复制到 /usr/src/linux 目录中并从用 bzip2 压缩的文件解压缩补丁文件:
[code:1:6ddc15f4ad]#bzip2 -d kdb-v4.2-2.4.20-common-1.bz2
#bzip2 -d kdb-v4.2-2.4.20-i386-1.bz2 [/code:1:6ddc15f4ad]
您将获得 kdb-v4.2-2.4.20-common-1 与 kdb-v4.2-2.4-i386-1 文件。
现在,应用这些补丁:
[code:1:6ddc15f4ad]#patch -p1 <kdb-v4.2-2.4.20-common-1
#patch -p1 <kdb-v4.2-2.4.20-i386-1 [/code:1:6ddc15f4ad]
这些补丁应该干净利落地加以应用。查找任何以 .rej 结尾的文件。这个扩展名表明这些是失败的补丁。如果内核树没问题,那么补丁的应用就不会有任何问题。
接下来,需要构建内核以支持 kdb。第一步是设置 config_kdb 选项。使用您喜欢的配置机制(xconfig 与 menuconfig 等)来完成这一步。转到结尾处的“kernel hacking”部分并选择“built-in kernel debugger support”选项。
您还可以根据自己的偏好选择其它两个选项。选择“compile the kernel with frame pointers”选项(如果有的话)则设置 config_frame_pointer 标志。这将产生更好的堆栈回溯,因为帧指针寄存器被用作帧指针而不是通用寄存器。您还可以选择“kdb off by default”选项。这将设置 config_kdb_off 标志,并且在缺省情况下将关闭 kdb。我们将在后面一节中对此进行详细介绍。
保存配置,然后退出。重新编译内核。建议在构建内核之前执行“make clean”。用常用方式安装内核并引导它。
[size=18:6ddc15f4ad]初始化并设置环境变量[/size:6ddc15f4ad]
您可以定义将在 kdb 初始化期间执行的 kdb 命令。需要在纯文本文件 kdb_cmds 中定义这些命令,该文件位于 linux 源代码树(当然是在打了补丁之后)的 kdb 目录中。该文件还可以用来定义设置显示与打印选项的环境变量。文件开头的注释提供了编辑文件方面的帮助。使用这个文件的缺点是,在您更改了文件之后需要重新构建并重新安装内核。
[size=18:6ddc15f4ad]激活 kdb[/size:6ddc15f4ad]
如果编译期间没有选中 config_kdb_off,那么在缺省情况下 kdb 是活动的。否则,您需要显式地激活它 - 通过在引导期间将 kdb=on 标志传递给内核或者通过在挂装了 /proc 之后执行该工作:
[code:1:6ddc15f4ad]#echo "1" >/proc/sys/kernel/kdb [/code:1:6ddc15f4ad]
倒过来执行上述步骤则会取消激活 kdb。也就是说,如果缺省情况下 kdb 是打开的,那么将 kdb=off 标志传递给内核或者执行下面这个操作将会取消激活 kdb:
[code:1:6ddc15f4ad]#echo "0" >/proc/sys/kernel/kdb[/code:1:6ddc15f4ad]
在引导期间还可以将另一个标志传递给内核。kdb=early 标志将导致在引导过程的初始阶段就把控制权传递给 kdb。如果您需要在引导过程初始阶段进行调试,那么这将有所帮助。
调用 kdb 的方式有很多。如果 kdb 处于打开状态,那么只要内核中有紧急情况就自动调用它。按下键盘上的 pause 键将手工调用 kdb。调用 kdb 的另一种方式是通过串行控制台。当然,要做到这一点,需要设置串行控制台(请参阅参考资料以获取这方面的帮助)并且需要一个从串行控制台进行读取的程序。按键序列 ctrl-a 将从串行控制台调用 kdb。
[size=18:6ddc15f4ad]kdb 命令[/size:6ddc15f4ad]
kdb 是一个功能非常强大的工具,它允许进行几个操作,比如内存与寄存器修改、应用断点与堆栈跟踪。根据这些,可以将 kdb 命令分成几个类别。下面是有关每一类中最常用命令的详细信息。
[size=18:6ddc15f4ad]内存显示与修改[/size:6ddc15f4ad]
这一类别中最常用的命令是 md、mdr、mm 与 mmw。
[size=18:6ddc15f4ad]md[/size:6ddc15f4ad] 命令以一个地址/符号与行计数为参数,显示从该地址开始的 line-count 行的内存。如果没有指定 line-count,那么就使用环境变量所指定的缺省值。如果没有指定地址,那么 md 就从上一次打印的地址继续。地址打印在开头,字符转换打印在结尾。
[size=18:6ddc15f4ad]mdr[/size:6ddc15f4ad] 命令带有地址/符号以及字节计数,显示从指定的地址开始的 byte-count 字节数的初始内存内容。它本质上与 md 一样,但是它不显示起始地址并且不在结尾显示字符转换。mdr 命令较少使用。
[size=18:6ddc15f4ad]mm[/size:6ddc15f4ad] 命令修改内存内容。它以地址/符号与新内容作为参数,用 new-contents 替换地址处的内容。
[size=18:6ddc15f4ad]mmw[/size:6ddc15f4ad] 命令更改从地址开始的 w 个字节。请注意,mm 更改一个机器字。
[size=18:6ddc15f4ad]示例[/size:6ddc15f4ad]
[code:1:6ddc15f4ad]显示从 0xc000000 开始的 15 行内存:
[0]kdb> md 0xc000000 15
将内存位置为 0xc000000 上的内容更改为 0x10:
[0]kdb> mm 0xc000000 0x10 [/code:1:6ddc15f4ad]
[size=18:6ddc15f4ad]寄存器显示与修改[/size:6ddc15f4ad]
这一类别中的命令有 rd、rm 与 ef。
[size=18:6ddc15f4ad]rd[/size:6ddc15f4ad] 命令(不带任何参数)显示处理器寄存器的内容。它可以有选择地带三个参数。...
下一页 摘要:
各位兄弟,有没有办法清除mbr里面的内容阿??
思一克 回复于:2003-09-05 10:28:58
a:
dos启动:
debug
-a
mov ax,0301
mov bx,1000
mov cx,1
mov dx,80
int 13
int 3
-
f 1000 ffff 0
-
g
-
q
bob_yy 回复于:2003-09-05 11:01:41
fdisk /mbr不行吗?
platinum 回复于......