S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

linux下常见的debug工具的使用

Posted on 2011-06-10 13:43 S.l.e!ep.¢% 阅读(968) 评论(0)  编辑 收藏 引用 所属分类: Unix

linux下常见的debug工具的使用

Posted on 2011-06-09 16:28 whspecial 阅读(6) 评论(0)  编辑 收藏引用 所属分类: 工具使用
     仅仅是介绍一些使用心得,并非manual,欲知详情请google。。。
     ---------------------------------------------------------------------------------------------------------------------------
     在实验室里混了这么久,蓦然回首,发现其实自己主要做的工作就是debug和fix bug。。。现在将自己debug时用到的一些工具分享出来,share给有需要的朋友,大牛看了请一笑了之。

     (1)GDB:最正宗最传统的debug工具,如果做kernel的开发,还有KDB可以使用。
     小tips:
     <1>可以attach到某一个进程进行调试,注意如果进程里有fork和exec调用来切换到其它进程的话,需要特殊处理
     <2>多线程也可以用gdb来调试,但是我用了之后感觉并不是很好。。。
     <3>如果遇到段错误或者程序crush这样的错误,可以使用gdb来调试core dump文件,但是生成core dump需要先进行设置(具体请google~)
     <4>注意内联函数是不能被gdb跟踪的
     <5>gdb很强大,请耐心点看manual。。。
     链接: http://www.gnu.org/software/gdb/documentation/

     (2)wireshark:虽然不是调试工具,但如果是做网络程序的开发,非常有用。
     小tips:
     <1>如果程序里的通信协议是使用字符串编码,非常好,但是如果使用二进制编码,wireshark不好用
     <2>对于tcp流,可以在某一个包点击右键:"follow tcp stream",可以看到该tcp流的全部信息
     <3>如果仅仅想看截取包的开头处的信息,可以将包截短,在"capture options"里的"limit each packet to"设置 
     <4>windows和linux下都有wireshark。。。
     链接: http://www.wireshark.org/docs/wsug_html_chunked/

     (3)strace:截获system call,如果能够看到某个system call的返回值错误,可以很轻松地找到bug原因。
     小tips:      
     <1>strace也可以像gdb一样去attach一个正在运行的进程,使用-p pid(进程号)即可
     <2>strace的输出比较多,可以-o 输出到文件里,分析的时候请耐心。。。
     链接: http://people.gnome.org/~newren/tutorials/developing-with-gnome/html/ch03s02.html

      (4)inotify-tools:截获文件系统触发的事件,这个是基于inotify框架来写的一个工具,但是感觉和strace相反,它给出的信息过于少。
     链接: https://github.com/rvoicilas/inotify-tools/wiki/

     (5)printf大法:最原始的未必就不好,有时也很有用。
     除了传统的printf,还有一些类似的东西
     perror:打印程序errorno http://pubs.opengroup.org/onlinepubs/009695399/functions/perror.html
     查看log信息:如果你是去修改别人的开源程序(经常有实验室这样干吧),那么它的log信息就很重要,记得按照你的需求去设置log level
     printk:kernel开发中的printf

     ----------------------------------------------------------------------------------------------------------------------------
     即使把太平洋里水全部倒出来,也浇不息我debug的热情!但是我能把太平洋的水全倒出来吗?不能,所以我对debug没有热情。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理