linux追代码,Linux上进程追踪与调试(strace和gdb)(示例代码)

引言:

我们某些服务出现故障的时候,我们都是根据屏幕的输出以及打印的日志来查找出出现了什么样的错误,但是有时候我们的很多守护进程启动正常却访问不到,比如我们使用Nginx服务,登陆web的时候,却迟迟不发生页面跳转或者访问页面迟迟没反应,这个时候我们就需要对nginx这个服务做一次进程追踪,我们使用strace/gdb这样的命令对进程做一次追踪,

strace:

1,strace命令说明

strace是能够显示用户空间发出的任何系统调用,在命令的执行过程中,strace会记录和解析命令进程的所有系统调用以及这个进程所收到的所有信号值

2,strace的使用

1)strace后面直接跟我们的命令

4eb32fe5703e6ac5a072ea7b0d3aa4e6.png

可以看到后面跟了许多系统调用的函数,我们根据这些可以清楚的知道,我们这个命令执行时发生了那些系统调用

2)使用-p选项,这个后面跟我们的pid号,可以查看当前进程处于什么状态

我们使用-p选项后面跟着nginx的进程号

834903a947253c08ac95455a387dc7c0.png我们可以看到,当我们的nginx没有访问量的时候,进程处于epoll_wait状态

当使用ab来对nginx做一次压力测试的时候,就会发现nginx进程疯狂的做系统调用

62ca023895700c05596afa4f0216aae8.png

a50c6225bd86c9017f37a13246c12488.png

访问数据的时候,需要处理各种数据,进程会有大量的系统调用产生

3)使用-c选项,我们可以显示进程使用系统调用的摘要信息,及使用了多少次系统调用

30335cfca1a3e1e9124879fb103e629d.png

我们可以看到使用的read,write,open这些系统调用,以及总共产生了多少次系统调用

4)使用-o选项,我们可以将分析结构保存在某个文件中,以供后续分析使用

5) 使用-t(秒)-tt(微秒)-ttt(微秒,时间为UNIX时间戳,即从1970年1月1日起的时间)

e4805a14ca641c16bf3c2279fa40c007.png

1a3d8e81404ae1bbd801f2dc8f1a31d5.png

08182dbd78dabcdf4c51ce4223da05ba.png

gdb:

<1>gdb命令说明

gdb是Linux下及UNIX下的程序调试工具,我们可以启动程序,让程序按照我们的需求来自由的运行

<2>gdb使用attach,后面跟着我们的pid信息,查看我们的进程状态  913d80ad44881b24272cd49ed29ce6a3.png如果想知道程序现在运行到了哪里,同样可以使用“backtrace”命令。当然也可以使用“step”命令对程序进行单步调试。在完成调试之后,不要忘记用detach命令断开连接,让被调试的进程可以继续正常运行。

gdb是个很复杂的工具,一般Linux下的C开发程序员会用到的比较多,这里就不做深入探讨了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值