感谢支持
我们一直在努力

Linux上进程追踪与调试(strace和gdb)

引言:

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

strace:

1,strace命令说明

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

2,strace的使用

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

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

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

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

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

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

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

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

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

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

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

gdb:

<1>gdb命令说明

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

<2>gdb使用attach,后面跟着我们的pid信息,查看我们的进程状态 

如果想知道程序现在运行到了哪里,同样可以使用“backtrace”命令。当然也可以使用“step”命令对程序进行单步调试。在完成调试之后,不要忘记用detach命令断开连接,让被调试的进程可以继续正常运行。

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

GDB调试工具入门  http://www.linuxidc.com/Linux/2016-09/135168.htm

在Ubuntu上用GDB调试printf源码 http://www.linuxidc.com/Linux/2013-03/80346.htm

Linux下用GDB调试可加载模块 http://www.linuxidc.com/Linux/2013-01/77969.htm

强大的C/C++ 程序调试工具GDB http://www.linuxidc.com/Linux/2016-09/135171.htm

使用GDB命令行调试器调试C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm

GDB调试命令总结  http://www.linuxidc.com/Linux/2016-08/133988.htm

GDB调试工具入门  http://www.linuxidc.com/Linux/2016-09/135168.htm

GDB 的详细介绍:请点这里
GDB 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137018.htm

赞(0) 打赏
转载请注明出处:服务器评测 » Linux上进程追踪与调试(strace和gdb)
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏