存档

作者存档

MyGdb(一) — 加载被调试程序

2011年1月6日 没有评论

从调试器的视角来看,正在运行的程序可以分为两类,一类是正常运行的,不受调试器干扰的程序。另一类是处于调试状态的程序,它的每一步运行都在调试器的掌控之下。

让程序处于调试状态大有2种方式,一种是静态加载,即由调试器来启动程序,告知系统,这个程序将要被调试。
第二种是动态加载,即程序正在运行,调试器通过一些系统调用来迫使使得程序处于调试状态。

分类: debugger theory, gdb 标签: ,

为KGDB 增加watchpoint断点支持 on x86

2010年11月18日 2 条评论

the watchpoint of kgdb 大致流程为:

A:using gdb to set a watchpoint

B:send out a set watchpoint protocol packet to kgdb from gdb
C:kgdb receive/parse the protocol packet

D:kgdb set a watchpoint hardware breakpoint on kernel

E:Once kernel hit a watchpoint breakpoint, kgdb will collect the watchpoint breakpoint
info, fill them to a Stop-Reply-Packets with watchpoint format, and send out to gdb

分类: kgdb, 深入kgdb 标签: ,

抓虫日记之 kgdb 和 删除硬断点

2010年10月22日 没有评论

为避免硬/软断点影响kgdb,在kgdb主程序kgdb_cpu_enter运行过程中,所有的断点是被disable的。
对于硬件断点来说,它会显示的调用kgdb_disable_hw_debug()来disable所有的硬件断点,
在kgdb离开时,调用kgdb_correct_hw_break()来使能/增加需要激活的硬件断点。

抓虫日记之 kgdb 与 removed breakpoint

2010年9月21日 没有评论

kgdb_skipexception()函数的引入是为了避免kgdb踩中已经删除的断点而做的特殊处理.
所有删除的断点,必须标记为BP_REMOVED, 否则就会出现kgdb踩中已经删除的断点这情况.

巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置

2010年8月24日 没有评论

巧用libc backtrace系列函数,在不具备gdb环境的类Linux系统上大致定位段错误位置

分类: LinuxDev 标签:

gdb 和 watchpoint

2010年8月14日 8 条评论

watchpoint,顾名思义,其一般用来观察某个变量/内存地址的状态(也可以是表达式),如可以监控该变量/内存值是否被程序读/写情况。
watchpoint可以看成是一种特殊的”断点”, 其实现一般需要CPU支持硬件断点,如果纯软件实现watchpoint,那好像会很耗CPU.(我没去看gdb的软0watchpoint的实现,有时间得去研究下,不过如果让我来实现这个功能(和同事讨论过),应该是设置watchpoint所在的那个页表为不可读/访问,然后在缺页处理那检测当前的页和地址是否是软设置watchpoint所在的页和watchpoint的地址,如果是,则说明可以假设该watchpoint发生了). 目前支持watchpoint硬件断点的arch有x86,ppc和mips。

分类: gdb 标签: ,

kgdb抓虫日记 – gdb 7.1 不能正常退出KGDB

2010年7月9日 没有评论

gdbserver对于不识别或者不支持的命令,都是返回””空包给gdb的,
所以kgdb也应当返回””空包给gdb,这样问题就解决了.

kgdb内核选项配置

2010年6月28日 没有评论

KGDB内核选项配置

kgdb抓虫日记 – set breakpoint at ppc64

2010年6月28日 没有评论

一般来说,往哪个点设置什么值,是由gdb来主导的,kgdb只是执行相应的动作,既然kgdb是正常执行的,
那也许就意味着是gdb搞错地址了,把module_event函数的地址给取错了,然后触发了这个问题.

kgdb抓虫日记 – kgdboe 与 system hang

2010年6月28日 没有评论

为解决这个bug,前前后后忙了我整整一个星期。虽然最终的问题和kgdb关系不大,但我学到了不少东西,
比如说加深了系统中断的处理实现和mips的很多东西。