关于core dump的提问
今天调试程序的时候,后台日志给的错误提示为memory(coredump)
并且我程序的功能是更新一条数据(插入数据的时候是没有该错误的),数据更新是不成功的,我想请教一下core dump这种错误是什么引起的。请各位大侠提供一些解决该问题的思路和可能引发该错误的方向及可能性。
note:由于服务器上core文件太大了,我打开core文件的时候里面并没有显示任何内容。我不知道core文件存放的内容我是否可以看得到,还是由于服务器速度比较慢,没能及时的显示出来。
[解决办法]
coredump文件是进程线性地址空间的拷贝,在程序奔溃时写入磁盘文件,以备定位崩溃原因或重现core当时的运行状况。使用gdb可以查看core文件的内容,执行$gdb appname corefile,进入gdb后输入bt或where可以看到崩溃当时的函数调用栈,如果应用程序带有调试信息,可以定位到源代码的行号。
引起core的常见原因是内存访问违例,磁盘文件超出操作系统允许的大小等,总之是访问了不该访问的东西,或许程序本身有逻辑错误,或许运行环境不运行程序按预期的方式运行。
[解决办法]
看一下磁盘空间,是否系统没法写完整core文件?
[解决办法]
引起coredump的原因很多,比如内存越界,比如除数是0等等。
coredump是操作系统内核保护自己的一种方式,就是不能由着进程胡来。当进程访问了不属于自己的东西,例如内核的东东,或者其他进程的东东,那么内核这时候是不能允许这个进程继续往下执行的,它会发一些信号量给这个进程,并强制终止了它。同时,如果我们设置了coredump功能,会把当时的现场保留下来,例如堆栈,从堆栈就可以看出当时是挂在哪个函数里的,如果是简单的错误,这时就能找到了。
分析core文件都是用gdb,具体你可以man一下gdb的用法。
[解决办法]
可以根据可执行文件导出符号文件,然后根据崩溃地址推算coredump的位置。