手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2016-11-11] 来源:Linux社区  作者:berniem2m [字体: ]

引言:

我们某些服务出现故障的时候,我们都是根据屏幕的输出以及打印的日志来查找出出现了什么样的错误,但是有时候我们的很多守护进程启动正常却访问不到,比如我们使用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

linux
相关资讯       GDB 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款