当前位置: 首页 > news >正文

问题排查|记录一次基于mymuduo库开发的服务器错误排查(段错误--Segmentation fault (core dumped))

问题记录:
在刚完成mymuduo库之后,写了一个简单的测试服务器,
但是在服务器运行后直接报错:

cherry@hcss-ecs-4995:~/mymuduo/example$ ./testserver
Segmentation fault (core dumped)

出现多错误这通常意味着程序试图访问其内存空间中未分配(或不允许)的部分。

所以我决定先使用gdb进行一下简单的调试:

gdb ./testserver

把程序跑起来之后马上定位到了报错位置:

Program received signal SIGSEGV, Segmentation fault.
EventLoop::updateChannel (this=0x7fffffffdd60, channel=0x555555572eb0) at /home/cherry/mymuduo/EventLoop.cc:126
126         poller_->updateChannel(channel);

我再查看代码:

125 void EventLoop::updateChannel(Channel *channel) {
126 	poller_->updateChannel(channel);
127 }

既然是段错误,说明我们访问了不被允许访问的内存,或者操作了不被允许操作的内存
接下来我们有以下三个主要的思路:

(gdb) print poller_ #poller是否是空
(gdb) print channel #channel是否为空
(gdb) print *channel #如果channel不是空,那么它是否指向了有效对象,该对象状态是否正常?
(gdb) backtrace #如果都正常,查看调用栈,是哪里调用了 EventLoop::updateChannel 方法

但是比较悲剧的是,我直接 print poller_ 就发现我们重要的poller对象竟然是空!

所以我马上去看了一下构造函数代码是否正常

EventLoop::EventLoop(): looping_(false), quit_(false), callingPendingFunctors_(false), threadId_(CurrentThread::tid()), poller_(Poller::newDefaultPoller(this)), wakeupFd_(createEventfd()), wakeupChannel_(new Channel(this, wakeupFd_)) 

在构造函数中, poller_的初始化是通过newDefaultPoller来完成的,那么去看看它是否正常工作:

Poller* Poller::newDefaultPoller(EventLoop *loop) {if (::getenv("MUDUO_USE_POLL")) {return nullptr; // 生成poll的实例} else {return nullptr; // 生成epoll的实例}
}

好巧不巧,我们竟然在生成epoll实例的地方返回了一个空!之前在写这个代码的时候还没有完成EpollPoller.h文件的书写,为了防止部分编译报错所以先写成空了。

更改代码如下:

#include "EpollPoller.h"
return new EPollPoller(loop);

相关文章:

问题排查|记录一次基于mymuduo库开发的服务器错误排查(段错误--Segmentation fault (core dumped))

问题记录: 在刚完成mymuduo库之后,写了一个简单的测试服务器, 但是在服务器运行后直接报错: cherryhcss-ecs-4995:~/mymuduo/example$ ./testserver Segmentation fault (core dumped)出现多错误这通常意味着程序试图访问其内存空…...

Mysql常用操作DQL数据库、表操作:

DQL是指MySQL数据库中的数据查询语言(Data Query Language)。它是用来从数据库中检索所需数据的语言。DQL允许用户通过指定查询条件和筛选条件来检索数据库中的数据,并以所需的方式来显示结果。DQL语句可以用于从单个表中查询数据&#xff0c…...

标题:Go语言中的YAML魔法:轻松配置你的环境

摘要: 本文将介绍如何在Go语言项目中使用YAML文件来管理配置,包括如何读取YAML文件以及如何在代码中解析和使用这些配置。 正文: 在编程世界中,配置管理是每个项目都必须面对的问题。对于Go语言项目来说,YAML文件是一…...

STM32高级控制定时器之输入捕获模式

目录 概述 1 输入捕获模式 1.1 原理介绍 1.2 实现步骤 1.3 发生输入捕获流程 2 使用STM32Cube配置工程 2.1 软件环境 2.2 配置参数 2.3 生成项目文件 3 功能实现 3.1 PWM调制占空比函数 3.2 应用函数库 4 测试 4.1 功能框图 4.2 运行结果 源代码下载地址&#xf…...

使用 Vue 3 和 qrcode.js 开发二维码显示组件

二维码在现代应用中广泛使用,例如支付、身份验证、链接分享等。本文将介绍如何使用 Vue 3 和 qrcode.js 库来创建一个灵活的二维码显示组件,并展示如何在应用中使用它。 1. 安装必要的依赖 首先,我们需要安装 Vue 3 和 qrcode.js。如果你还…...

LabVIEW异步编程概述

LabVIEW异步编程是一种在图形化编程环境中处理并行任务的方法。通过异步执行,可以提高程序的响应速度和资源利用效率,使得多个任务可以独立进行而不互相干扰。 原理 LabVIEW异步编程的核心在于使用异步调用节点(Asynchronous Call By Refer…...

【数据库】MySQL表的操作

目录 一.创建表 二.查看表 三.修改表 四.删除表 一.创建表 基本语法: CREATE TABLE table_name(field1 datatype,field2 datatype,field3 datatype) character set 字符集 collate 校验规则 engine 储存引擎field表示列名 datatype表示列的类型 charatcer se…...

【mybatis解决oracle查询in超过1000条数据】

1、因为代码中前人未考虑in 数据可能大于1000&#xff0c;导致现在系统报错&#xff0c;MPP low前人 直接上sql select * from table a <where><if test"list ! null and list.size > 0">and a.name in<foreach collection"list" inde…...

EasyExcel之动态表头导出不生效

今天接到一个优化需求&#xff0c;表格导出后的表头顺序和页面不一致&#xff0c;要优化成一致的。根据传入的字段&#xff0c;动态导出数据&#xff0c;并保证顺序。 我看到导出的实体类都有ExcelProperty注解&#xff0c;同时也在官网查看了这注解的含义和使用。 ExcelPrope…...

appium元素定位工具_uiautomatorviewer.bat

特点&#xff1a; uiautomatorviewer是android-sdk自带的元素定位工具uiautomatorviewer只能用于安卓系统&#xff1b;它是通过截屏分析XML布局文件方式&#xff0c;来提供控件信息的查看服务 uiautomatorviewer.bat 基本使用 路径&#xff1a;这个工具是Android SDK中自带&…...

手机离线翻译哪个好?断网翻译也能超丝滑

有时在异国他乡&#xff0c;面对语言不通的窘境&#xff0c;即便是简单的对话也变得异常困难&#xff0c;真是挑战满满&#xff01; 然而&#xff0c;能离线翻译的软件让语言障碍不再是问题&#xff0c;不必依赖网络也能轻松进行翻译啦~ 只需下载所需的语言包&#xff0c;选择…...

神器!!Python热重载调试【送源码】

在 Python 开发的路上&#xff0c;调试是我们不可避免的一环。 而今天推荐的开源项目Reloadium &#xff0c;让你在不重启程序的情况下实现代码的即时更新和调试。 &#x1f504; Reloadium 功能亮点&#xff1a; 1. 热重载魔法&#xff1a; Reloadium 不仅仅能够实现代码的…...

Flutter基础 -- Dart 语言 -- 列表集合枚举

目录 1. 列表 List 1.1 初始 1.2 声明 1.2.1 自动 1.2.2 定长 1.2.3 生成数据 1.3 属性 1.4 方法 1.4.1 添加 1.4.2 查询 1.4.3 删除 1.4.4 Range 1.4.5 洗牌 1.4.6 排序 1.4.7 复制子列表 1.4.8 操作符 2. 集合 Map 2.1 初始 2.2 声明 2.2.1 松散 2.2.2 …...

怎么花草识别?方法有三种!

怎么花草识别&#xff1f;在这个五彩斑斓的世界里&#xff0c;花草是我们生活中不可或缺的一部分。它们点缀着我们的环境&#xff0c;为我们带来无尽的美丽与惊喜。然而&#xff0c;面对众多的花草种类&#xff0c;你是否曾感到困惑和迷茫&#xff0c;不知道如何识别它们&#…...

【qt】自定义对话框

自定义对话框 一.自定义对话框的使用1.应用场景2.项目效果3.界面拖放4.模型和视图的设置5.action功能实现 二.自定义对话框的创建1.设置对话框界面2.创建对话框 三.对话框的功能与样式实现1.对话框数据的交换2.对话框的显示3.设置对话框的特性4.完成按钮的功能 四.编辑表头的对…...

汽车IVI中控开发入门及进阶(二十二):video decoder视频解码芯片

前言: 视频解码器在许多汽车、专业和消费视频应用中仍有需求。Analog Devices是模拟视频产品领域的行业领导者,提供一系列视频解码器,可将标准(SD,standard definition)和高清(HD,High definition)分辨率的模拟视频高质量转换为MIPI或TTL格式的数字视频数据。典型的应…...

混沌测试介绍

混沌测试介绍 1. 混沌测试简介 混沌测试&#xff08;Chaos Engineering&#xff09;是一种测试方法&#xff0c;通过在生产环境中故意引入故障&#xff0c;测试系统在异常情况下的表现&#xff0c;以提高系统的弹性和鲁棒性。其目标是确保系统能够在面对不可预见的事件或故障…...

python 单链表创建,遍历

# !/usr/bin/python3 # -*- coding:utf-8 -*- """ author: JHC000abcgmail.com file: 111.py time: 2024/05/30 21:37:09 desc:""" # 定义单链表结构 class ListNode:def __init__(self,value0,nextNone):self.value valueself.next nextdef _…...

【方法】如何取消PPT“以只读方式打开“?

以“只读方式”打开的PPT&#xff0c;可能会受到不同的限制&#xff0c;比如无法编辑修改内容&#xff0c;无法保存原文件等。那如何取消PPT的“只读方式”呢&#xff1f;不同形式的“只读方式”&#xff0c;取消方法不同&#xff0c;下面一起来看看吧&#xff01; “只读方式”…...

ChatTTS,语气韵律媲美真人的开源TTS模型,文字转语音界的新魁首,对标微软Azure-tts

前两天 2noise 团队开源了ChatTTS项目&#xff0c;并且释出了相关的音色模型权重&#xff0c;效果确实非常惊艳&#xff0c;让人一听难忘&#xff0c;即使摆在微软的商业级项目Azure-tts面前&#xff0c;也是毫不逊色的。 ChatTTS是专门为对话场景设计的文本转语音模型&#x…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...