- 论坛徽章:
- 3
|
在把一个程序从windows移植到linux下遇到的问题。
程序是一个中间件的作用,在windows下运行正常,移植到linux下就出现了问题。大致就是客户端服务端通过该中间件交互信息,该程序使用socket通信吧。然后启动后调用服务能调用成功,但是调用几次之后程序就宕掉了。
查看了core文件,里面是
Program terminated with signal 11, Segmentation fault.
#0 0x00002b05482a70dd in vfprintf () from /lib64/libc.so.6
用bt命令后
#0 0x00002b05482a70dd in vfprintf () from /lib64/libc.so.6
#1 0x00002b05482c5af9 in vsprintf () from /lib64/libc.so.6
。。。(省略号处是一堆重复的有关一些动态库的库文件的内容,有几千条)
最后几行显示的是select函数附近的代码。
在程序中,select附近代码大致如下:
while(循环条件)
{
... //初始化套接字
...//设置超时时长
...//设定套接字
Ret = select(64, &Readfds, &Writefds, &Exceptfds, &Time);
if (Ret < 1 )
{
Sleep(1);
continue;
}
...//对是否有数据来的一些判断的代码
}
查看core文件的时候发现bt命令后有时候显示在select,有时候在Sleep。
然后select返回值是0,应该是超时的意思吧。
就我个人感觉,gdb查看core文件之后产生的消息意思是fprintf函数造成了段错误造成程序崩溃的样子。不过代码里有用到这函数的地方都看了下,好像没啥问题。
然后之后还有指向select函数的。select函数超时的话会对程序造成影响吗?还有在通信中会有哪些原因造成select函数超时呢?
这个代码移植时就是改了些头文件啊还有些调用的函数,主要的实现部分是没改动的,在windows下完全没问题,linux下调用几次就崩溃了。
现在就纠结是什么原因造成了程序崩溃了,求大神帮我分析下可能是啥原因造成的错误。
|
|