当前位置: 技术问答>linux和unix
linux下(RH9)程序core掉之后,GDB提示信息的含义
来源: 互联网 发布时间:2016-03-20
本文导语: linux下,一个程序core了,然后用GDB查看信息,原因是某一个函数传递的参数outof bound。 #8 0x08056808 in service_processor (cur=0x66416a80, buffer=0x53ed54d0 , length=75) 什么情况下会引起 这类提示呢? 我试着分析了下: ...
linux下,一个程序core了,然后用GDB查看信息,原因是某一个函数传递的参数outof bound。
#8 0x08056808 in service_processor (cur=0x66416a80, buffer=0x53ed54d0 , length=75)
什么情况下会引起 这类提示呢?
我试着分析了下:
在调用该函数的时候,buffer指向的内存已经被释放了(或者没被释放,不管释放不释放,这时候就算buffer是野指针程序仍能执行),但是这时候还不会提示错误,程序继续往下执行(通过这个函数在堆栈第8个位置推断),一直执行到段错(segmentation fault,这个时候buffer指向的内存一定被释放掉了,从而引起段错误),这时候程序core掉。然后gdb分析的时候,从core的地方往回推,发现从堆栈的第8个位置开始使用的内存访问越界,从而标注一个 。
这样分析对不对?
#8 0x08056808 in service_processor (cur=0x66416a80, buffer=0x53ed54d0 , length=75)
什么情况下会引起 这类提示呢?
我试着分析了下:
在调用该函数的时候,buffer指向的内存已经被释放了(或者没被释放,不管释放不释放,这时候就算buffer是野指针程序仍能执行),但是这时候还不会提示错误,程序继续往下执行(通过这个函数在堆栈第8个位置推断),一直执行到段错(segmentation fault,这个时候buffer指向的内存一定被释放掉了,从而引起段错误),这时候程序core掉。然后gdb分析的时候,从core的地方往回推,发现从堆栈的第8个位置开始使用的内存访问越界,从而标注一个 。
这样分析对不对?
|
对,地址越界的情况并不一定会立即体系出来。
|
编译器问题,我上次遇到过ubuntu会出现这个问题,用fedora编译就是好的,换个版本的编译器看看!