详谈UNIX环境进程异常退出

发表于:2012-6-14 10:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:解维东    来源:51Testing软件测试网采编

分享:

  问题调试和定位

  进程异常退出时,操作系统会产生 core dump 文件,cored ump 文件是进程异常退出前内存状态的快照,运行 GDB 分析 core dump 文件可以帮助调试和定位问题。

  1)首先,分析 core dump 查看导致进程异常退出的具体信号和退出原因。

  使用 GDB 调试实例一(代码清单 3)的分析结果如下:

  1. [root@machine ~]# gdb demoSegfault core.24065   
  2.  ( 已省略不相干文本 )   
  3.  Core was generated by `./demoSegfault'.   
  4.  Program terminated with signal 11, Segmentation fault.

  分析结果显示,终止进程运行的信号是 11,SIGSEGV,原因是内存非法访问。

  2)然后,定位错误代码。

  在 GDB 分析 core dump 时,输入“bt”指令打印进程退出时的代码调用链,即 backtrace,就可以定位到错误代码。

  用 gcc 编译程序时加入参数 -g 可以生成符号文件,帮助调试。

  重新编译、执行实例一,并且分析 core dump 文件,定位错误代码:

  1. [root@machine ~]# gcc -o demoSegfault demoSegfault.c -g   
  2.  [root@machine ~]# ./demoSegfault  &   
  3.  [1] 28066   
  4.  [1]+  Segmentation fault      (core dumped) ./demoSegfault   
  5.  [root@machine ~]# gdb demoSegfault /corefiles/core.28066   
  6.  ( 已省略不相干文本 )   
  7.  Core was generated by `./demoSegfault'.   
  8.  Program terminated with signal 11, Segmentation fault.   
  9.  #0  0x0804835a in main () at demoSegfault.c:5   
  10.  5               str[0] = 'H';   
  11.  (gdb) bt   
  12.  #0  0x0804835a in main () at demoSegfault.c:5   
  13.  (gdb)

  在加了参数 -g 编译后,我们可以用 gdb 解析出更多的信息帮助我们调试。在输入“bt”后,GDB 输出提示错误出现在第 5 行。

  3)最后,在定位到错误代码行后,就可以很快知道根本原因,并且修改错误代码。

77/7<1234567
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号