kgtp
2014-05-12 11:17
218 查看
kgtp使用总结
1,介绍:
Kgtp项目主页是:http://code.google.com/p/kgtp/
如其项目主页所描述,Kgtp是一个实时且轻量级的Linux跟踪内核调试工具。也许说是一个内核跟踪调试接口更合适,通过它来连通内核和GDB,使得GDB可以对内核进行跟踪调试。GDB既可以是在本机,也可以在另外一台机器上,甚至还可以进行离线调试,而这些感觉应该都是GDB本身提供的Targets、Trace
Files等功能,而Kgtp主要还是进行内核调试信息的收集与交互、导出等,当然,Kgtp可能也会提供一些其它辅助GDB的功能。
Kgtp目前支持X86-32,X86-64,MIPS和ARM平台。
2,编译:
2.1,内核
既然是跟踪调试内核,选定并编译我们自己的内核是必须的,内核的编译安装等步骤无需多说,但为了达到本文的既定目的,选上如下几个编译选项是必不可少的:
2.2,Kgtp
从Kgtp主页下载到最新的项目源码,我这里是kgtp_20111111.tar.bz2,解压、make即可:
如果是ARM等需要交叉编译环境,那就修改一下目录里的Makefile文件,不表。
3,安装使用:
3.1,安装
编译之后的Kgtp就是一个内核模块,insmod即可,不过在insmod之前需先查看mount是否包含有如下两行:
如果没有则需执行如下对应的命令进行挂载:
如果不这样做,会导致Kgtp模块安插完之后,/sys/kernel/debug/下什么没有,当然也可以无需进行检查,直接mount,最多也只是提示个“mount: xxx already mounted or xxx busy”的错误而已,反正不管怎样做,之后再进行insmod gtp.ko后,我们的Kgtp内核跟踪调试接口/sys/kernel/debug/gtp就有了:
3.2,本地跟踪
直接看命令如下,由于系统提供的GDB不支持python,也就是提示如下:
所以,我这里自己编译了一个从GDB官网下载的最新的GDB,Kgtp开源项目作者还提供了一个专门针对Kgtp有特别帮助的GDB变种gdbt,不过我这里先不去管它:
试一下打印内核全局变量如下,这说明我们的Kgtp起效果了。
4,总结:
关于Kgtp的更多用法,比如远程跟踪、离线跟踪、条件跟踪等可以直接参考项目主页的帮助文档,我就不再赘述。下面主要说一下Kgtp能做什么,不能做什么,这才是我们最关注的重点。
首先,我们要知道Kgtp提供的是trace而不是break,正因为这样,Kgtp才能不干扰中断内核的正常运行,也正因为这样,Kgtp只能做信息的采集功能,而不能做内核或模块的单步调试。那么具体来说,Kgtp提供的优点以及能够做的事情主要包括:
4.1,简单独立
这个是最重要的,简单才方便我们去使用它。Kgtp以单独模块存在,想使用时直接insmod,调试完毕时rmmod即可。同时,Kgtp不干扰中断内核的正常运行,将对内核的影响缩减到最小。
4.2,查看当前系统全局变量
前面已经看到如何利用Kgtp打印当前的内核变量jiffies_64,那么其它内核变量也类似打印出来,这在我们需要调试内核时有用,无需再去写个模块printk一下或其它变通办法。
4.3,帮助我们调试模块
模块执行出现异常,我们最常用的调式办法是在认为合适的地方加上printk查看对应的变量,发现第一次printk没放对地方或是需要查看的变量值却没有去printk,这时只能换个地方或修改对应的printk,改动和编译耗费不少时间,而通过Kgtp就比较方便。我们只需通过Gdb命令修改对应的变量信息收集即可。另外,Kgtp支持条件设置跟踪点,方便收集与统计更有针对性。
4.4,系统性能瓶颈分析
这才是Kgtp的强项,除了其提供了大量的自定义状态变量,更可以通过GDB scripts编写复杂的信息统计逻辑,方便提供分析,这点对做服务器运维的童鞋在进行系统性能分析时应该特别有用。
转载请保留地址:http://lenky.info/archives/2011/11/296 或 http://lenky.info/?p=296
1,介绍:
Kgtp项目主页是:http://code.google.com/p/kgtp/
如其项目主页所描述,Kgtp是一个实时且轻量级的Linux跟踪内核调试工具。也许说是一个内核跟踪调试接口更合适,通过它来连通内核和GDB,使得GDB可以对内核进行跟踪调试。GDB既可以是在本机,也可以在另外一台机器上,甚至还可以进行离线调试,而这些感觉应该都是GDB本身提供的Targets、Trace
Files等功能,而Kgtp主要还是进行内核调试信息的收集与交互、导出等,当然,Kgtp可能也会提供一些其它辅助GDB的功能。
Kgtp目前支持X86-32,X86-64,MIPS和ARM平台。
2,编译:
2.1,内核
既然是跟踪调试内核,选定并编译我们自己的内核是必须的,内核的编译安装等步骤无需多说,但为了达到本文的既定目的,选上如下几个编译选项是必不可少的:
从Kgtp主页下载到最新的项目源码,我这里是kgtp_20111111.tar.bz2,解压、make即可:
3,安装使用:
3.1,安装
编译之后的Kgtp就是一个内核模块,insmod即可,不过在insmod之前需先查看mount是否包含有如下两行:
直接看命令如下,由于系统提供的GDB不支持python,也就是提示如下:
关于Kgtp的更多用法,比如远程跟踪、离线跟踪、条件跟踪等可以直接参考项目主页的帮助文档,我就不再赘述。下面主要说一下Kgtp能做什么,不能做什么,这才是我们最关注的重点。
首先,我们要知道Kgtp提供的是trace而不是break,正因为这样,Kgtp才能不干扰中断内核的正常运行,也正因为这样,Kgtp只能做信息的采集功能,而不能做内核或模块的单步调试。那么具体来说,Kgtp提供的优点以及能够做的事情主要包括:
4.1,简单独立
这个是最重要的,简单才方便我们去使用它。Kgtp以单独模块存在,想使用时直接insmod,调试完毕时rmmod即可。同时,Kgtp不干扰中断内核的正常运行,将对内核的影响缩减到最小。
4.2,查看当前系统全局变量
前面已经看到如何利用Kgtp打印当前的内核变量jiffies_64,那么其它内核变量也类似打印出来,这在我们需要调试内核时有用,无需再去写个模块printk一下或其它变通办法。
4.3,帮助我们调试模块
模块执行出现异常,我们最常用的调式办法是在认为合适的地方加上printk查看对应的变量,发现第一次printk没放对地方或是需要查看的变量值却没有去printk,这时只能换个地方或修改对应的printk,改动和编译耗费不少时间,而通过Kgtp就比较方便。我们只需通过Gdb命令修改对应的变量信息收集即可。另外,Kgtp支持条件设置跟踪点,方便收集与统计更有针对性。
4.4,系统性能瓶颈分析
这才是Kgtp的强项,除了其提供了大量的自定义状态变量,更可以通过GDB scripts编写复杂的信息统计逻辑,方便提供分析,这点对做服务器运维的童鞋在进行系统性能分析时应该特别有用。
转载请保留地址:http://lenky.info/archives/2011/11/296 或 http://lenky.info/?p=296
相关文章推荐
- php 导出excel 文件--收藏
- php实现断点下载
- PHP实现数字补零功能的2个函数介绍
- 后台邮箱配置SMTP函数,如何把发件人设置为自定义昵称
- 七个很有意思的PHP函数
- php-fpm 简介
- phpMyAdmin自动登录和取消自动登录的配置方法
- php array_filter函数的使用
- 解决vsftpd日志时间问题
- PHP通过JAVA桥使用连接池提高性能
- 你可能不知道PHP get_meta_tags()函数
- PHP函数getenv简介和使用实例
- vsftpd的快速安装
- phpmyadmin 出现Cannot start session without errors 错误 总结的几种原因和解决办法
- php数组分页类
- 在PHP语言中使用JSON
- Sublime text 2/3 [Decode error - output not utf-8] 完美解决方法
- php文件缓存技术实现代码
- PHP中容易混淆的地方
- php中的那些小事