Exception类:继承自标准模板库exception,主要功能为记录异常发生时的堆栈信息。
类图:
私有成员变量:
- message_: 存储异常信息字符串
- stack_ :存储异常发生时栈信息
私有成员函数:
- fillstacktrace:用于记录异常发生时栈回收的信息,在构造函数中被调用
公有成员函数:
- what: 返回message
- stackTrace:返回stack
知识点:
- backtrace,栈回溯,保存各个栈帧的地址
- backtrace_symbols,根据地址,转成相应的函数符号
- abi::__cxa_demangle,将C++内部改编的函数名还原
程序使用示例:
#include <muduo/base/Exception.h>
#include <stdio.h>
class Bar
{
public:
void test()
{
throw muduo::Exception("oops");
}
};
void foo()
{
Bar b;
b.test();
}
int main()
{
try
{
foo();
}
catch (const muduo::Exception& ex)
{
printf("reason: %s\n", ex.what());
printf("stack trace: %s\n", ex.stackTrace());
}
}
运行结果: