exception

class exception:public std::exception
{
};

作用:

实现了一个异常类,继承于std::exception,主要用于实现打印线程调用栈信息.

成员变量:

private:
string m_message;
string m_stack;

主要含有异常消息以及线程栈信息两个数据成员,

调用栈信息通过currentthread::stackTrace(false)获取。

成员函数:

public:
exception(string what);
~exception() noexcept override=default;
//覆盖了父类的what函数,用于打印异常信息
const char* what() const noexcept override
{
return m_message.data();
}
//覆盖了父类的stackTree函数,用于打印栈信息
const char* stackTree() const noexcept
{
return m_stack.data();
}

noexcept是告诉编译器函数中不会发生异常,这有利于编译器对程序做更多的优化。

测试:

#include "base/currentthread.h"
#include "base/exception.h"
#include <stdio.h> void foo()
{
throw mymuduo::exception("errorinfo");
} int main()
{
try
{
foo();
}
catch (const mymuduo::exception& ex)
{
printf("reason: %s\n", ex.what());
printf("stack trace:\n%s\n", ex.stackTree());
}
}

打印信息如下:

reason: errorinfo
stack trace:
/home/zqc/c_c++Repo/Qtcode/build-mymuduo-Desktop_Qt_5_14_2_GCC_64bit-Debug/mymuduo() [0x40178c]
/home/zqc/c_c++Repo/Qtcode/build-mymuduo-Desktop_Qt_5_14_2_GCC_64bit-Debug/mymuduo() [0x401da7]
/home/zqc/c_c++Repo/Qtcode/build-mymuduo-Desktop_Qt_5_14_2_GCC_64bit-Debug/mymuduo() [0x401e1c]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0) [0x7fb5c75ce840]
/home/zqc/c_c++Repo/Qtcode/build-mymuduo-Desktop_Qt_5_14_2_GCC_64bit-Debug/mymuduo() [0x401249]

muduo源码解析4-exception类的更多相关文章

  1. muduo源码解析5-mutex相关类

    mutexlock和mutexlockguard class mutexlock:noncopyable { }: class mutexlockguard:noncopyable { }: 作用: ...

  2. Mybatis源码解析3——核心类SqlSessionFactory,看完我悟了

    这是昨晚的武汉,晚上九点钟拍的,疫情又一次来袭,曾经熙熙攘攘的夜市也变得冷冷清清,但比前几周要好很多了.希望大家都能保护好自己,保护好身边的人,生活不可能像你想象的那么好,但也不会像你想象的那么糟. ...

  3. AOP源码解析:AspectJAwareAdvisorAutoProxyCreator类的介绍

    AspectJAwareAdvisorAutoProxyCreator 的类图 上图中一些 类/接口 的介绍: AspectJAwareAdvisorAutoProxyCreator : 公开了Asp ...

  4. muduo源码解析11-logger类

    logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间 ...

  5. muduo源码解析10-logstream类

    FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件 ...

  6. java源码解析之Object类

    一.Object类概述   Object类是java中类层次的根,是所有类的基类.在编译时会自动导入.Object中的方法如下: 二.方法详解   Object的方法可以分成两类,一类是被关键字fin ...

  7. Netty源码解析 -- 内存对齐类SizeClasses

    在学习Netty内存池之前,我们先了解一下Netty的内存对齐类SizeClasses,它为Netty内存池中的内存块提供大小对齐,索引计算等服务方法. 源码分析基于Netty 4.1.52 Nett ...

  8. AOP源码解析:AspectJExpressionPointcutAdvisor类

    先看看 AspectJExpressionPointcutAdvisor 的类图 再了解一下切点(Pointcut)表达式,它指定触发advice的方法,可以精确到返回参数,参数类型,方法名 1 pa ...

  9. Bulma 源码解析之 .columns 类

    {说明} 这一部分的源码内容被我简化了,另外我还额外添加了一个辅助类 is-grow. .columns // 修饰类 &.is-centered justify-content: cente ...

  10. java源码解析之String类(二)

    上一节主要介绍了String类的一些构造方法,主要分为四类 无参构造器:String(),创建一个空字符串"",区别于null字符串,""已经初始化,null并 ...

随机推荐

  1. three.js 制作一个三维的推箱子游戏

    今天郭先生发现大家更喜欢看我发的three.js小作品,今天我就发一个3d版本推箱子的游戏,其实webGL有很多框架,three.js并不合适做游戏引擎,但是可以尝试一些小游戏.在线案例请点击博客原文 ...

  2. zookeeper 源码编译

    环境:mac 1.github上下载 源码 项目地址:https://github.com/apache/zookeeper 2.安装 ant mac:brew update ->  brew ...

  3. Python访问字符串中的值

    Python访问字符串中的值: 1.可以使用索引下标进行访问,索引下标从 0 开始: # 使用索引下标进行访问,索引下标从 0 开始 strs = "ABCDEFG" print( ...

  4. PHP date_interval_format() 函数

    ------------恢复内容开始------------ 计算两个日期间的间隔,然后格式化时间间隔: 实例 <?php $date1=date_create("2013-01-01 ...

  5. PHP imagecharup - 垂直地画一个字符

    imagecharup — 垂直地画一个字符.高佣联盟 www.cgewang.com 语法 bool imagecharup ( resource $image , int $font , int ...

  6. Android中的LruCache的原理和使用

    Android中的LruCache的原理和使用 LruCache,虽然很多文章都把LRU翻译成"最近最少使用"缓存策略,但Android中的LruCache真的如此吗? 答案是No ...

  7. 【好文推荐】黑莓OS手册是如何详细阐述底层的进程和线程模型的?

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. spring-Sessions are not supported by the MongoDB cluster to which this client is connected

    原因: 1.mongodb版本过低4.0以下不支持事务的情况下会报这个 2.安全认证问题参考如下连接 https://blog.csdn.net/ssehs/article/details/10530 ...

  9. 干!一张图整理了 Python 所有内置异常

    在编写程序时,可能会经常报出一些异常,很大一方面原因是自己的疏忽大意导致程序给出错误信息,另一方面是因为有些异常是程序运行时不可避免的,比如在爬虫时可能有几个网页的结构不一致,这时两种结构的网页用同一 ...

  10. 连通图算法详解之① :Tarjan 和 Kosaraju 算法

    相关阅读: 双连通分量 ,割点和桥 简介 在阅读下列内容之前,请务必了解 图论相关概念 中的基础部分. 强连通的定义是:有向图 G 强连通是指,G 中任意两个结点连通. 强连通分量(Strongly ...