首页 > 深入kgdb > kgdb源代码分析(2.6.27)

kgdb源代码分析(2.6.27)

2010年7月1日 发表评论 阅读评论

kgdb源代码分析(2.6.27)

本文由penny编写, 你可以通过发邮件到lianglip@gmail.com联系penny,
也可以直接评论本文章与penny交流.

0. 概述
1. 异步通知
2. 准备工作
3.gdb 远程串行协议(GDB remote serial protocol)
4. 命令实现:
4.1 断点.
4.2 continue 和 step
5 初始化时机.

0. 概述

前段时间用 KGDB 调了一下内核,感觉这个东西还不错,不过更令人感兴趣的是它的工作
原理. 内核运行得好好的,那么多线程在好几个 cpu 上面跑,就是因为踩到一个断点,它就
把所有东西都放下来让 gdb来调,kgdb 是怎样办到的?
本文是本人看 kgdb 的代码的一些记录,如有错误的地方敬请指出.

一般软件调试的原理是,调试器根据目标文件的调试信息找到源码和机器码之间的映射
关系,并把它关心的指令替换成一条断点指令,x86 对应的就是 asm(“int $3”),它的二进制代
码是 0xcc.当程序执行到这个地方时断点指令被执行,程序被中断,调试器接管它的控制权,
这时可以查看内存信息甚至修改内存.当调试器完成任务后把断点指令替换回原来的指令,
并把 pc 寄存器减一,让 cpu 从被中断的那条指令开始执行.这样程序可以在没有影响执行的
情况下被调试.
调试内核也离不开一般原理,只不过内核不同一般程序,不能单靠同一台机的 gdb 来完成.
要依靠 kgdb,它是内核里面的一小段程序,它可以和另外一台机器上的 gdb 进行通信,可以执行
gdb 过来的一些命令并返回信息,完成调试过程.
关于kgdb的配置,网上有很多,而且非常详细,这里就不重复了.

本文的内容:
1.从内核是怎样把控制权交给 kgdb 的开始,到
2.kgdb 的入口函数,看 kgdb 怎样处理竞态,再了解
3.kgdb 和 gdb 之间的通信协议,接着是
4.kgdb 对具体命令的执行,最后再看看
5.kgdb 是在什么时候被启动的.
内核版本是 2.6.27.

本文地址:
http://www.kgdb.info/kgdb_source_2-6-27/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

  1. 2011年10月10日17:36 | #1

    dddddddd

    [回复]

  2. pc8504
    2012年3月5日15:51 | #2

    您好,我想问一下,你们分析kgdb代码的时候,是怎么分析的呢?那可以调试kgdb的代码吗?可以直接在kgdb的关键函数处设置断点吗?我是vmware里用qemu里跑了linux3.2内核,在kgdb的一些关键函数处打断点,为什么都停不下来呢?

    [回复]

    DDD 回复:

    调试kgdb,只能用最原始的方法(如果没有硬件调试器的话),在有些地方也可以用printk,但会影响判断,大部分情况下只能看现象和分析。
    即如果系统不死掉,并能正常调试,测试通过就表明当前代码在当前状态下是正常的。。。

    [回复]

  1. 2010年6月30日16:14 | #1
  2. 2010年6月30日16:15 | #2
  3. 2010年6月30日16:22 | #3
  4. 2010年6月30日16:23 | #4
  5. 2010年6月30日16:24 | #5
  6. 2010年6月30日16:25 | #6