当前位置:  技术问答>linux和unix

关于 linux 下的调试软件 KDB

    来源: 互联网  发布时间:2015-05-27

    本文导语:  关于 linux 下的调试软件 KDB 这个软件可以调试linux 内核 ,不知道是不是独立于linux的,像window下的 softice ,系统挂了,他还可以运行. 我目前想写一个window下的调试软件,苦于没有资料,跑到linux下看有没有收获! ...

关于 linux 下的调试软件 KDB

这个软件可以调试linux 内核 ,不知道是不是独立于linux的,像window下的 softice ,系统挂了,他还可以运行.

我目前想写一个window下的调试软件,苦于没有资料,跑到linux下看有没有收获!

|
Linux 内核调试器内幕  英文原文  
 
 
   
内容: 
 
入门 
初始化并设置环境变量 
激活 KDB 
KDB 命令 
技巧和诀窍 
结束语 
参考资料 
关于作者 
对本文的评价 
 
 
相关内容: 
 
掌握 Linux 调试技术 
编译 Linux 内核 
订阅 developerWorks 时事通讯 
订阅 developerWorks Toolbox 
 
 
在 Linux 专区还有: 
 
教程 
工具与产品 
代码与组件 
文章 
 
 
 
 
KDB 入门指南
级别:高级
 

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 压缩的文件解压缩补丁文件:

#bzip2 -d kdb-v4.2-2.4.20-common-1.bz2

#bzip2 -d kdb-v4.2-2.4.20-i386-1.bz2 
您将获得 kdb-v4.2-2.4.20-common-1 和 kdb-v4.2-2.4-i386-1 文件。

现在,应用这些补丁:

#patch -p1 /proc/sys/kernel/kdb 
在引导期间还可以将另一个标志传递给内核。kdb=early 标志将导致在引导过程的初始阶段就把控制权传递给 KDB。如果您需要在引导过程初始阶段进行调试,那么这将有所帮助。

调用 KDB 的方式有很多。如果 KDB 处于打开状态,那么只要内核中有紧急情况就自动调用它。按下键盘上的 PAUSE 键将手工调用 KDB。调用 KDB 的另一种方式是通过串行控制台。当然,要做到这一点,需要设置串行控制台(请参阅参考资料以获取这方面的帮助)并且需要一个从串行控制台进行读取的程序。按键序列 Ctrl-A 将从串行控制台调用 KDB。

KDB 命令
KDB 是一个功能非常强大的工具,它允许进行几个操作,比如内存和寄存器修改、应用断点和堆栈跟踪。根据这些,可以将 KDB 命令分成几个类别。下面是有关每一类中最常用命令的详细信息。

内存显示和修改
这一类别中最常用的命令是 md、mdr、mm 和 mmW。

md 命令以一个地址/符号和行计数为参数,显示从该地址开始的 line-count 行的内存。如果没有指定 line-count,那么就使用环境变量所指定的缺省值。如果没有指定地址,那么 md 就从上一次打印的地址继续。地址打印在开头,字符转换打印在结尾。

mdr 命令带有地址/符号以及字节计数,显示从指定的地址开始的 byte-count 字节数的初始内存内容。它本质上和 md 一样,但是它不显示起始地址并且不在结尾显示字符转换。mdr 命令较少使用。

mm 命令修改内存内容。它以地址/符号和新内容作为参数,用 new-contents 替换地址处的内容。

mmW 命令更改从地址开始的 W 个字节。请注意,mm 更改一个机器字。

示例

显示从 0xc000000 开始的 15 行内存:
[0]kdb> md 0xc000000 15 
将内存位置为 0xc000000 上的内容更改为 0x10:
[0]kdb> mm 0xc000000 0x10 
寄存器显示和修改
这一类别中的命令有 rd、rm 和 ef。

rd 命令(不带任何参数)显示处理器寄存器的内容。它可以有选择地带三个参数。如果传递了 c 参数,则 rd 显示处理器的控制寄存器;如果带有 d 参数,那么它就显示调试寄存器;如果带有 u 参数,则显示上一次进入内核的当前任务的寄存器组。


    
 
 

您可能感兴趣的文章:

  • 如何使用linux下gdb来调试python程序
  • linux 新手散分贴 我要在linux下调试多个.c和.h文件的程序 怎么调试?
  • linux下用gdb调试程序感觉非常不方便,不知道大家使用的什么工具进行调试的呀?
  • linux gdb: 我在一台机器上编译的程序用GDB可以调试,把程序放到另外一台机器上调试,调试信息就没有了 这是什么原因呢?
  • linux下调试的问题
  • 请问Linux下的C语言程序开发大家如何进行断点调试和单步调试?
  • 请教 Linux 中 eclipse + CDT 调试问题
  • linux下调试程序...
  • 关于linux下eclipse调试c++程序的问题
  • 到底怎么样调试linux内核啊?
  • linux下有没有类似于debugview的东东///或者linux下除了gdb,还有什么可以用于调试的软件吗?
  • linux下用gdb调试程序感觉非常不方便,不知道大家使用的什么工具进行调试的呀? iis7站长之家
  • linux下的调试工具
  • Linux程序调试工具 XBuildStudio
  • linux下如何单步或设置断点调试驱动或应用程序
  • LINUX下的程序调试问题
  • 调查一下:编写Linux内核模块 驱动程序各位高手所用的编辑环境和调试工具
  • linux 下用gdb调试器出现问题
  • 在Linux下用哪种调试工具比较好!(有加分!!!)
  • 请问linux中如何跟踪调试USB无线网卡驱动
  • 求一linux下图形调试工具
  • Linux下通过rpm安装软件详细介绍以及如何将软件安装到指定目录
  • Linux下有哪些可视化软件开发Linux下的应用软件和驱动程序
  • 我想开发一个LINUX下的FTP服务器软件,能否推荐现在几款比较好的在LINUX下的FTP软件做为参考
  • 请教LINUX下有哪些商业的软件部署软件?
  • 问题6:如何在linux shell 下查看安装软件情况,和卸载软件?
  • 听说在linux里面安装一个什么X的程序就可以运行windows的软件,不知道是什么软件
  • 怎么干净删除软件?谁知道linux下有netants同样的软件下载?
  • WINDOWS下可以使用flashget来下载软件,那在linux下用什么工具软件来下载程序呢?哪里有linux平台下的下载工具可以下载?谢谢!
  • 学软件工程(专升本)是不是linux软件开发工程师的起步之路?
  • 请问:在Linux下有没有类似Windows下的COM这样的软件软件结构?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3