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。但个人觉得还是以上方法能够分析清楚一些。