muduo库源码分析(3):异常类

muduo源码分析--我对muduo的理解 分为几个模块 EventLoop、TcpServer、Acceptor、TcpConnection、Channel等 对于EventLoop来说: 他只关注里面的主驱动力,EventLoop中只关注poll,这类系统调用使得其成为Reactor模式,EventLoop中有属于这个loop的所有Channel,这个loop属于哪一个Server.   几个类存在的意义: 从应用层使用的角度 阅读详情
  • 异常类Exception
    前言:
#include <execinfo.h>
int backtrace(void** buffer,int size);
buffer:是一个指针数组,数组中存放的是调用过的函数地址
buffer----->    ---------------
                |  调用函数地址  |    
                ---------------
                |              |
                ---------------
                |              |
                ---------------
返回值:数组中存放的元素的个数

char** backtrace_symbols(void* const *buffer,int size);
将调用的函数地址转换成字符串
返回值:指针数组,数组中的元素是函数地址对应的字符串(编译期已确定)
注意:这里的数组是由malloc分配出来的,所以我们需要手动释放该数组内存,而数组中指向的字符串有系统释放。
重要函数:fillStackTrace()
// 获取线程栈信息
void Exception::fillStackTrace()
{
  const int len = 200;
  void* buffer[len];
  int nptrs = ::backtrace(buffer, len);
  char** strings = ::backtrace_symbols(buffer, nptrs);
  if (strings)
  {
    for (int i = 0; i < nptrs; ++i)
    {
      stack_.append(strings[i]);
      stack_.push_back('\n');
    }
    free(strings);
  }
}
  • 异常类定义(其他成员函数没什么难点)
    explicit :修饰的构造函数只能显示初始化
    成员函数加throw():该函数不抛出异常
class Exception : public std::exception
{
 public:
  explicit Exception(const char* what):message_(what)
  {
      fillStackTrace();
  }
  explicit Exception(const string& what)
  :message_(what)
  {
      fillStackTrace();
  }
  virtual ~Exception() throw(){};
  virtual const char* what() const throw();
  const char* stackTrace() const throw()
  {
      return stack_.c_str();
  }

 private:
  void fillStackTrace();
  string message_;// 保存异常信息 
  string stack_;// 保存堆栈信息
};
const char* Exception::what() const throw()
{
  return message_.c_str();
}
muduo_net库源码分析(四) 对应p28 阅读详情

相关推荐

muduo库总结(一)源码粗读

前言 我相信用linux进行后端开发的C++程序员应该对muduo库都比较熟悉,muduo库利用了epoll+线程池对网络IO模块进行了封装,实现了高并发、高性能的网络库,通过简单的几个类能快速的建立起网络模块,非常的方便。今天对muduo库进行一个简单的源码分析。 简介 muduo 是一个基于 Reactor 模式的现代 C++ 网络库,它采用非阻塞 IO 模型,基于事件驱动和回调,原生支持多核多线程,适合编写 Linux 服务端多线程网络应用程序。 源码 我们从muduo库的一个使用案例中出发,一步一步

weixin_43527115的博客 762

muduo基础库学习--异常处理

Exception实现 //

sunximei的博客 298

muduo源码分析之EventLoop::runInLoop()函数

muduo源码分析之EventLoop::runInLoop()函数

上善若水 2793

muduo学习异常类

头文件 #include 获取程序的堆栈信息的函数 /* Store up to SIZE return address of the current program state in    ARRAY and return the exact number of values stored.  */ int backtrace(void **array, int size);

tooyoungtosimple的博客 361

麒麟 ARMv10 SP3 安装 Oracle 19c 官方文档 或 教程

在麒麟ARMv10 SP3系统上安装Oracle 19c需要特别注意架构兼容性。

qq_43032338的博客 2939

BMS | 从一串到几百串硬件架构简介

锂电池在生活中越来越多的方面扮演能源的角色,除了大家熟知的电动汽车行业,在一些消费类,工业类电子产品比如手机,电动自行车,电动工具中都有应用,追本溯源今天我们一起来学习下最基础的BMS架构。 1~4串架构 以S8241为代表的无通信/无固件/模拟器件 可实现过充保护、过放保护、过流/短路,参数由器件后缀代码决定;通信类手持设备供电系统;1~4节电池保护板架构 如图使用S-8241系列保护IC,一对充放电MOS管控制充放电的回路的切断和接通,系统供电来自于电芯电压,VM引脚用于检测过...

ningvay的博客 9917

muduo网络库Exception异常类

1 Exception类 Exception类包括两个文件 :Exception.cc, Exception.h。 1.1 Exception.h #ifndef MUDUO_BASE_EXCEPTION_H #define MUDUO_BASE_EXCEPTION_H #include <muduo/base/Types.h> #include <exception>...

Be The Best! 1468

中国 it 集成商 主要有哪些 主要做什么工作

既要懂技术(云计算/AI),又要吃透行业(金融/政务)。:用国产化方案(麒麟OS+达梦数据库)替换Oracle/Windows。:如为银行搭建数据中心(采购华为服务器+思科交换机)。:数据中心监控、故障处理(如华胜天成服务国家电网)。:核心交易系统(如中科软为保险公司开发精算平台)。:智慧城市(如太极股份承建“一网通办”政务平台)。:HIS医院信息系统(如东华软件的电子病历系统)。:硬件透明化(如服务器价格战)压缩集成毛利。:工厂设备联网(新华三的工业互联网平台)。

hxsln11的博客 3035

muduo/base库学习笔记(2)-----Exception类

Exception类 Exception::Exception(string msg)构造函数的实现 Exception::Exception(string msg) : message_(std::move(msg)), stack_(CurrentThread::stackTrace(/*demangle=*/false)) { } 其中CurrentThread::stack...

xiuxiu__deng的博客 286

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 222

【 Git学习记录(三)】推荐四款主流的Git代码托管平台 —— GitHub、GitLab、Gitee、Coding

了解过Git之后,作为一个程序猿最基本的,你还需要了解目前主流的在线代码托管平台,并至少选择其中一款在平时开发中使用。这里特别介绍以下四款: 国外平台 GitHub —— 全球最流行的代码托管平台 GitLab —— 基于git的仓库管理程序 国内平台 Gitee —— 开源中国旗下的代码托管平台 Coding —— 支持社交元素的代码托管平台 一. GitHub 链接地址:https://github.com/ GitHub目前是全球最流行的代码托管平台(别称:全球最大的同性交友.

JZevin的博客 6091

muduo网络库学习之Exception类、Thread 类封装中的知识点(重点讲pthread_atfork())

一、Exception类封装 class Exception : public std::exception  #include  int backtrace(void **buffer, int size); // backtrace 栈回溯,保存各个栈帧的地址  char **backtrace_symbols(void *const *buffe

Meditation 3519

YOLOv11改进 | Neck篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov11(全网独家创新)

本文给大家带来的最新改进是利用分层特征融合块HFFB创新yolov11的neck部分我称之为HFPN,这个模块可以融合局部特征、全局特征、中间特征将三种特征融合在一起辅助yolov11进行检测,经过我的设计分为三种可以针对大目标、小目标、标准目标的检测方式均不同,大家可以根据自己的数据集进行不同的选择,本文的内容为我独家创新。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、原理介绍三、核心代码四、添加方法4.1 修改一4.2 修改二4.3 修改三4.4 修改四。

Snu77的博客 5210

muduo库源码分析和总结

陈硕大神的muduo库设计巧,但是难读懂,这里简单做个总结,注意回调函数太多,需仔细研究回调的传递和调用。、,其次陈硕认为网络编程的本质是处理三个半事件,重点关注之连接的建立连接的断开包括主动断开和被动断开消息到达,文件描述符可读消息发送完毕。这个算半个事件。...

woodslay的博客 1678

ECU诊断功能测试:从理论到实践

ECU诊断功能是指通过特定的诊断协议与ECU进行通信,以获取ECU的状态信息、故障码、数据流等,并执行特定的诊断操作。诊断功能的主要目的是帮助开发人员和维修人员快速定位和解决ECU中的问题,确保车辆的安全性和可靠性。UDS协议是ISO 14229标准的一部分,定义了一系列的诊断服务,如读取故障码、清除故障码、读取数据流等。UDS协议基于CAN(Controller Area Network)总线,具有较高的灵活性和扩展性。读取故障码是诊断功能中最基本的操作之一。通过读取故障码,可以快速定位ECU中的问题。

闲人编程的博客 1806

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1548

muduo库源码分析

1. 功能概述:- Channel类主要负责一个文件描述符的事件分发。它与一个文件描述符相关联,并封装了该文件描述符上的 I/O 事件及其对应的回调函数。- 它将底层的 I/O 复用机制(如epoll)与用户的业务逻辑进行解耦,使得用户可以专注于处理特定文件描述符上的事件,而无需关心底层的 I/O 复用细节。2. 工作原理:- Channel在构造时会关联一个文件描述符和一个EventLoop对象。它会在EventLoop中注册对特定事件(如可读、可写、异常等)的关注;

lzf的博客 1167

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

muduo源码分析:异常类封装

Exception::what() 返回出错信息 Exception::stackTrace() 返回出错时的调用栈 实现: #include backtrace,栈回溯,保存各个栈帧的地址 backtrace_symbols,根据地址,转成相应的函数符号 #include abi::__cxa_demangle :将编译修改过后的函数符号转化为原始代码中的函数符合

le119126的专栏 619

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Muduo 网络库源码分析 之 关键技术点总结

最近又把muduo网络库仔细研究了一遍,收获良多。本文将对muduo中的设计思想以及关键的技术细节进行总结和分析,当然由于篇幅的原因这里更多的是对关键技术的简略提及,具体细节还需要读者自己去查找学习资料。muduo/base Date类 日期类的封装,使用Julian(儒略日)可以方便的计算日期差。具体公式和思想见 儒略日的计算 Exception类 异常类的封装,对外提供what()输出错误信

NK_test的博客 3328

muduo源码分析:线程类Thread封装

线程id Linux中,每个进程有一个pid,类型pid_t,由getpid()取得。 Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而

le119126的专栏 1727

详细muduo的使用(一)——源码分析(架构和概念)

目录 muduo的架构和概念 一个简单的例子 连接的建立 消息的读取 消息的发送 为什么要移除可写事件 连接的断开 runInLoop的实现 为什么要唤醒EventLoop wakeup是怎么实现的 doPendingFunctors的实现 muduo的线程模型 主从reactor模式 业务线程池 总结 参考 muduo的架构和概念 muduo中类的职责和...

康Code的博客 4905

Reactor实例之 muduo 源码分析

首先宣传一下自己的博客, 因为一些不可抗因素同步到csdn, 上面的内容层级分块更清晰一些,内容基本相同Reactor模型中, muduo网络库算是比较简单的一个, 源码也比较容易看, 本文以muduo中的组件为例进行说明, 其他的组件类似。

weixin_41008987的博客 921

muduo_inspect库源码分析(41)

muduo_inspect库通过HTTP方式为服务器提供监控接口 接受了多少个TCP连接 当前有多少个活动连接 一共响应了多少次请求 每次请求的平均响应时间多少毫秒 。。。 Inspector     // 包含了一个HttpServer对象 ProcessInspector // 通过ProcessInfo返回进程信息 ProcessInfo // 获取进程相关信息

Riak, Spark, Golang, Erlang, 云存储, 云计算, 数据挖掘 1791

muduo库源码分析: TcpConnection

muduo库源码分析: TcpConnection

lzf的博客 516

(P35)muduo_base库源码分析:muduo库如何支持多线程,multiple reactors

文章目录1.muduo库如何支持多线程2.multiple reactors 1.muduo库如何支持多线程 muduo支持多线程的方式:一个程序有多个EventLoop,一个EventLoop属于一个线程,也就是所谓的one Loop per thread EventLoopThread(IO线程类) EventLoopThreadPool(IO线程池类) IO线程池的功能是开启若干个IO线程,并让这些IO线程处于事件循环的状态 2.multiple reactors 每个Reactor都属于一个

喜欢打篮球的普通人 518

通过源码分析如何使用muduo库实现自定义应用层协议

自定义应用层协议是指在标准传输层协议(如TCP或UDP)之上定义的一套规则,用于描述应用程序如何在两个或多个端点之间交换数据。数据格式消息结构传输规则错误处理会话管理在muduo网络库中,使用和来实现不同消息类型的处理。在这个场景中,和数据格式:使用Protocol Buffers作为序列化和反序列化数据的工具,Protocol Buffers是一种高效的二进制格式,支持多种编程语言。消息结构:定义了不同类型的Protocol Buffers消息,每种消息类型都有其特定的字段和数据结构。

decade777555的博客 1573
上一篇: Muduo源码分析(2):原子类
下一篇: muduo库源码分析(4):线程类
jacktangj
博客等级 码龄15年 7粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值