存档

文章标签 ‘kgdb源代码分析’

内核调试器kdb与kgdb模式相互切换

2011年3月16日 16 条评论

自从kdb集成到内核后,调试内核就多了一种选择,可以选择仅需要目标机,自己调试自己的kdb,
或选择需要额外一台机器来辅助调试的kgdb

引人kdb,也引发一个新功能需求,即调试器之间的切换选择,如从kdb模式切换到kgdb模式或者反过来。

而且由于kdb和kgdb并不互斥,可在系统中同时存在,而kdb不需要额外的机器来辅助调试这一便利性,
所以在kgdb和kdb同时被使能的情况下,系统调试器缺省设置为kdb模式,这时kgdb用户使用gdb尝试
去连接内核的话,由于缺省设置为kdb模式,为了方便用户使用,还要求系统可以自动从kdb切换到kgdb
模式的功能(当gdb连接的时候)。

kgdb源代码分析(2.6.27)

2010年7月1日 3 条评论

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

kgdb源代码分析(2.6.27)第一章-异步通知

2010年7月1日 没有评论

当内核踩到一个断点时,当前进程是用什么方式通知 kgdb,控制权又是怎样到 kgdb
手上的呢?

kgdb源代码分析(2.6.27)第二章-准备工作

2010年7月1日 没有评论

在当今多线程和多 cpu 的情况下,到处都充满了竞态,那
个线程都怕被别人搞破坏,那 kgdb 又是怎样让自己立于不败之地,控制好 cpu 们的?

kgdb源代码分析(2.6.27)第三章-gdb 远程串行协议

2010年7月1日 4 条评论

RSP 是一种基于 ASCII 码的协议,以 gdb 发送命令,目标端(在这里是 kgdb)返回执行
结果或信息的方式来进行的,而命令和回复在传输过程中又是封装在一个包(packet)里面
的.每个包以一个’$’开始,接着是实际数据,数据以一个’#’结束,后面跟着两位十六进制数
字用作校验和($packet-data#checksum).

kgdb源代码分析(2.6.27)第四章-命令实现

2010年7月1日 没有评论

到 kgdb 这边的都是很直接的,比如用户试图在
gdb中打印一个局部变量的值,gdb 通过和 kgdb 得到当前进程寄存器的信息,最终计算出要
读的内存地址和长度,kgdb 只要应 gdb 的要求提供相应的信息和设置相应的地址就够了,所
以 gdb 是调试里面的主角.

kgdb源代码分析(2.6.27)第四章-4.2 continue 和 step

2010年7月1日 没有评论

总结一下这个过程:
1.gdb 获得当前 pc 寄存器值,并把它减一.
2.取消所有断点.
3.单步调试原来断点位置的指令.
4.单步调试引起的 debug 中断让 kgdb 在次拿到控制权,kgdb 再把所有断点加回去.
5.后面继续单步调试.

kgdb源代码分析(2.6.27)第五章-kgdb初始化时机

2010年7月1日 没有评论

一个程序编译好之后有代码段,只读数据段,数据段等一些段,而
__attribute__((__section__(…)))这个gcc的编译扩展属性,它能够把函数或数据放入
指定名字的段中。