目录
客户问题
客户报告程序hang在那不干活了,通过查看现场发回来的diag信息,我们发现有一个进程几乎占用了100%CPU。
于是让客户发回来这个进程的core dump。
研究发现它陷入了一个循环链表。
GDB自定义命令发现循环链表
这个问题我们按照客户的重现办法在release版本上能重现,但在debug版本上无法重现。所以我就想写一个GDB自定义命令打印这个链表,同时如果是循环链表则给出警告。当然你可以改源代码,但那样周期就长了,因为你要编译+部署+重现。
我先直接给出GDB自定义命令的实现,然后再详细解释:
注意:这个代码只检查了job header是环的一部分,没检查内部有环的情况。
define print_job_list
set $jobhead_real=*(void**)&jobhead
set $jobtemp1=$jobhead_real
set $jobcount1=0
set $limited1=500
if ($argc>0)
set $limited1=$arg0
end
while ($jobt