strace + pstack + gdb 对函数调试

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) 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值