英文

https://github.com/teawater/kgtp

什么是KGTP?
KGTP是一个能在产品系统上实时分析Linux内核和应用程序(包括Android)问题的全面动态跟踪器。
使用KGTP不需要在Linux内核上打PATCH或者重新编译,只要编译KGTP模块并insmod就可以。

其让Linux内核提供一个远程GDB调试接口,于是在本地或者远程的主机上的GDB可以在不需要停止内核的情况下用GDB tracepoint和其他一些功能 调试 和 跟踪 Linux内核和应用程序。
即使板子上没有GDB而且其没有可用的远程接口,KGTP也可以用离线调试的功能调试内核(见/sys/kernel/debug/gtpframe和离线调试)。

KGTP支持 X86-32 , X86-64 , MIPS 和 ARM 。
KGTP支持大部分版本的Linux内核 (从 2.6.18 到upstream)。

http://www.infoq.com/cn/presentations/gdb-sharp-knife-kgtp-linux-kernel 是介绍KGTP的中文视频
http://www.youtube.com/watch?v=7nfGAbNsEZY或者http://www.tudou.com/programs/view/fPu_koiKo38/ 是介绍KGTP的英文视频。

如何使用KGTP?
#kgtp.py将在本机上自动配置和启动KGTP和GDB。
#第一次使用这个脚本需要等一段时间因为有一些包需要下载。
wget https://raw.githubusercontent.com/teawater/kgtp/master/kgtp.py
sudo python kgtp.py
#访问内核的内存。
(gdb) p jiffies_64
$2 = 5081634360
#在函数vfs_read上设置trace点并收集这个函数的backtrace信息。
(gdb) trace vfs_read
Tracepoint 1 at 0xffffffff811b8c70: file fs/read_write.c, line 382.
(gdb) actions
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
>collect $bt
>end
(gdb) tstart
(gdb) tstop
(gdb) tfind
Found trace frame 0, tracepoint 1
#0 vfs_read (file=file@entry=0xffff88022017b000,
 buf=buf@entry=0x7fff0fdd80f0 <Address 0x7fff0fdd80f0 out of bounds>,
 count=count@entry=16, pos=pos@entry=0xffff8800626aff50) at fs/read_write.c:382
382 {
(gdb) bt
#0 vfs_read (file=file@entry=0xffff88022017b000,
 buf=buf@entry=0x7fff0fdd80f0 <Address 0x7fff0fdd80f0 out of bounds>,
 count=count@entry=16, pos=pos@entry=0xffff8800626aff50) at fs/read_write.c:382
#1 0xffffffff811b9819 in SYSC_read (count=16,
 buf=0x7fff0fdd80f0 <Address 0x7fff0fdd80f0 out of bounds>, fd=<optimized out>)
 at fs/read_write.c:506

请到KGTPCN(中文版) or KGTP(英文版)看更多如何使用KGTP的介绍。
或者下载PDF版本: kgtpcn.pdf(中文版) kgtp.pdf(英文版).

如果你有使用GDB的经验,请阅读 or GDB调试普通程序和KGTP的区别表看使用GDB调试普通程序和使用KGTP的区别。

请到https://github.com/teawater/kgtp/blob/master/UPDATE取得KGTP的更新信息。
http://www.freelists.org/list/kgtp是KGTP的邮件列表。
317654748是KGTP的QQ群。
如果KGTP帮到了你,请捐助它的开发,谢谢!

我的主页