最近遇到一个由内存映射引起崩溃问题,因此记录一下解决方法:
一,使用gdb加载core文件,bt操作命令查看堆栈崩溃信息(当未发现core文件的时候可以通过dmesg命令工具进行排查):
定位错误函数代码:
bool ErrorMsgManage::WriteErrMsgToFile (unsigned long updateTime)
{
// 加锁
std::lock_guard<std::mutex> lkfile(m_filelock);
// 获取文件指针和map错误队列
ftruncate(fd, sizeof(sErrMsgFile)*m_ErrorMsg_map.size() + TIME_LEN) ;
// 从文件指针的现行位置
lseek(fd,0,SEEK_CUR) ;
// 文件对象映射到进程的地址空间
unsigned char *p_map = (