Linux 下调试工具的学习
Linux下调试工具主要有strace(lstace),pstack,pstree,以及ps、gdb等与进程相关工具;
Linux下有两个命令strace 和ltrace 可以查看一个
strace: 可以追踪应用程序在运行过程中所发起的系统调用(http://book.51cto.com/art/201305/395383.htm 总结的不错)
从strace的Man手册可以看到几个有用的选项。 (http://asram.blog.51cto.com/1442164/326191)
-p pid:通过进程号来指定被跟踪的进程。
-o filename:将跟踪信息输出到指定文件。
-f:跟踪其通过frok调用产生的子进程。
-t:输出每一个系统调用的发起时间。
-T:输出每一个系统调用消耗的时间。
pstack: 可以查看运行进程函数栈的调用关系 (pstack学习笔记,总结的很好)
http://blog.yufeng.info/archives/873 pstack 的shell脚本实现,
strace + pstack 查找运行程序性能瓶颈,用于改善程序性能,首先用strace查看每个系统调用所消耗的时间,找到消耗最长的系统调用,然后应用pstack来检查函数内部的系统调用,找到用户态函数瓶颈;
具体实现:
strace -p pid -Ttt -o outfile
其次调用sh pstack.sh pid 查看调用关系;
注意事项:由于程序运行状态不确定,结果也可能不确定,可以运行多次;
参照:http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html
在ubuntu中没有pstack,需要下载,也可以直接用脚本;
Window下拷贝脚本文件到linux下出现问题:
直接从window下拷贝到linux中,运行会发生错误,提示“Syntax error: end of file unexpected (expecting "then")”
解决方案:
1) 检查是否if语句格式问题
2) 如果不是,则window下的换行符为\n\r,而linux下之后\r,从而导致了语法错误。
利用工具dos2unix可以解决,或者在linux下安装tofrodos(sudo apt-get install tofrodos
);
Dos文件格式转为Unix格式:dos2unix,fromdos,todos
在Windows下回车符是\r\n回车换行
(十六进制为0d0a,可以转换为0a0a即可,在vim中,用:%!xxd 编辑,然后:%!xxd -r 返回即可。测试成功 http://www.cnblogs.com/killkill/archive/2010/06/23/1763785.html)
ptree:http://blog.csdn.net/yfkiss/article/details/6729364 树形结构显示进程与线程之间的关系
gdb: 可以单步调试,追踪每一步状态 (http://www.cnblogs.com/bangerlee/archive/2012/06/04/2532674.html)