Ubuntu上systemtap安装

        听群里的弟兄们讨论Linux内核调试神器systemtap的神奇,自己也动手安装下玩玩,参照了前辈们的博客教程,并以此文做个简单的记录。
   以下就是安装的过程:
    (一)安装elfutils,提供分析调试信息的库函数,及libcap-dev
      sudo apt-get install elfutils
                        sudo apt-get install  libcap-dev
            (二)安装systemtap
                        也可以下载最新的源码,手动编译安装,这里是直接通过安装包安装:

      sudo apt-get install systemtap

                         注意:如果安装失败可以尝试apt-get update更新一下源试试,如果遇到依赖问题可以用aptitude install尝试.

      (三)第三部安装调试需要的debuginfon
    这是最纠结的一步,本来参照网上其他前辈的安装方法是需要找到与自己本机ubuntu内核完全对应的内核debuginfo,而且要求内核版本号和发行次数完全一致。结果在ubuntu官网上找了半天也未果。最后在一位前辈的指引下,尝试另外一种方法。具体来说,就是自己上网下载自己喜欢的内核版本,手动编译内核,再替换本机内核,相当于自己制作debuginfo。
               1.git下载最新的内核源码
         git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

                    或者更快的: git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux.git
      2.切换到自己喜欢的内核版本,以本机为例
         git checkout v3.14.8,之后git show 确认
               3.取得.config
                最好使用/boot下的原装config,这样升级之后不容易出现问题,但以下选项记得要打开,如果没有打开就make memuconfig打开
          CONFIG_DEBUG_INFO
          CONFIG_KPROBES
          CONFIG_RELAY
          CONFIG_DEBUG_FS
          CONFIG_MODULES
          CONFIG_MODULE_UNLOAD
          CONFIG_UPROBES 或者CONFIG_UTRACE
     4.make -j N (N为cpu核数,加快编译) 
     5.make modules
              6.make modules_install
              7.make install
                 最后会在/boot目录下生成新内核的config,vmlinuz,initrd.imge和systemmap等。
           8.修改grub信息,默认启动最新的内核
                 第一步,修该/etc/default/grub中的GRUB_DEFAULT一行,GRUB_DEFAULT="M>N",M为第几个menuentry,N为该menuentry第几个submenu,一定注意加引号。
          第二步,update-grub.
              9.reboot之后,成功了会进入新内核。

   (四)验证systemtap是否安装成功
      stap -e 'probe kernel.function("sys_open") {log("hello world") exit()}'
    
      工欲善其事,必先利其器,可以好好玩systemtap了,以后文章会介绍systemtap的调试内核的一个bug.
    

你可能感兴趣的:(Linux调试)