Posted on 2011-06-10 13:43
S.l.e!ep.¢% 阅读(980)
评论(0) 编辑 收藏 引用 所属分类:
Unix
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没有热情。