怎么解决你的Segmentation fault (core dumped)问题

http://westsoftware.blog.163.com/blog/static/260941092011460252776/

 

开发一个Linux/Unix C/C++程序的时候,有时候会出现莫名的core dump问题,这问题是让人比较令人苦恼的,主要是要找出导致这样的问题,很不好找,特别是一个比较庞大的工程项目中。

        从网上或者从一些其他的参考资料中可以得知,其实大多数还是由于操作内存不当而造成的,当然这种core dump问题也不能一概而论就什么某某原因导致的错误。那目前我的项目当中出现过好几次的core dump,下面我来具体来分析我的解决过程。

         首先通过系统根据core文件来收集到底是什么原因导致错误(本人系统为AIX):

:/home/card/dev/src/ecc_txnsrv>snapcore -r core

Cleaning up in progress  ..


Core file "core" created by "ecc_txnsrv"

pass1() in progress ....

                Calculating space required .

                Total space required is 51049 kbytes ..

                Checking for available space ...

                Available space is 339960 kbytes

pass1 complete.

pass2() in progress ....

                Collecting fileset information .

                Collecting error report of CORE_DUMP errors ..

                Creating readme file ..

                Creating archive file ...

                Compressing archive file ....

pass2 completed.

Snapcore completed successfully. Archive created in /tmp/snapcore. 

通过上面命令分析,收集的错误在 /tmp/snapcore目录下

那我们现在进入这个目录,看一下:

:/home/card/dev/src/ecc_txnsrv>cd /tmp/snapcore
:/tmp/snapcore>ls
snapcore_679972.pax.Z
:/tmp/snapcore>uncompress snapcore_679972.pax.Z
:/tmp/snapcore>ls
snapcore_679972.pax
:/tmp/snapcore>pax -r -f snapcore_679972.pax
:/tmp/snapcore>ls
README  core  ecc_txnsrv  errpt.out  home  lslpp.out  oracle  snapcore_679972.pax  usr
:/tmp/snapcore>cat errpt.out 

我们比较关心的是errpt.out这个文件,打开看一下,由于文件内容较多,我只贴出一部分:

/home/card/dev/src/ecc_txnsrv/core
PROGRAM NAME
ecc_txnsrv
STACK EXECUTION DISABLED
           0
COME FROM ADDRESS REGISTER
db_connec 188

PROCESSOR ID
  hw_fru_id: 1
  hw_cpu_id: 3

ADDITIONAL INFORMATION
strcpy 4
db_connec 198
RecvAndSe 18C
main 318
__start 9C

Symptom Data
REPORTABLE

我们可以从中猜测可能源码中的调用db_connect这个函数有点问题,由于我当前的环境是调用是一个动态库中的一个函数。

当然还可以通过其他的方法,比如在AIX下也可以使用dbx。但个人觉得还是以上方法能够分析清楚一些。

 

你可能感兴趣的:(C,C++)