基于libevent2.0.21版本编写了一个服务器端程序,在读消息回调函数内调用了这段代码evutil_socket_t fd = bufferevent_getfd(bev)。但会偶发一个问题,当服务器端和客户端完成连接后,客户端更换了IP发送数据上来,触发了服务器端的读消息回调函数,代码在跑到evutil_socket_t fd = bufferevent_getfd(bev)这段代码时会发生段错误导致服务器端程序崩溃。
问题代码如下:
cout<<"4.1"<
cout<<"4.2"<
输出结果如下
4.1
Segmentation fault (core dumped)
请问如何解决这个问题?
生成dump文件,调试定位
libevent2.0.21,你这版本比较老了,是2012年的。可以在官网下载最新的版本2.1.12试试;
如果还是不行,生成core文件,然后gdb调试定位一下。
建议你用GDB 去你的coredump文件打断点看下哪个地方出错的,是不是空指针造成的
这篇文章讲的很详细,请看:libevent做一个简单的服务器应答程序