Exception类用于异常数据的储存和获取

头文件
#ifndef MUDUO_BASE_EXCEPTION_H
#define MUDUO_BASE_EXCEPTION_H
#include <muduo/base/Types.h>
#include <exception>
namespace muduo
{
class Exception : public std::exception
{
public:
explicit Exception(const char* what);
explicit Exception(const string& what);
virtual ~Exception() throw();
virtual const char* what() const throw();
const char* stackTrace() const throw(); //返回异常数据栈
private:
void fillStackTrace();
string message_;
string stack_;
};
}cpp文件
#include <execinfo.h>
#include <stdlib.h>
using namespace muduo;
Exception::Exception(const char* msg)
: message_(msg)
{
fillStackTrace();
}
Exception::Exception(const string& msg)
: message_(msg)
{
fillStackTrace();
}
Exception::~Exception() throw ()
{
}
const char* Exception::what() const throw()
{
return message_.c_str(); //返回当前异常内容指针
}
const char* Exception::stackTrace() const throw()
{
return stack_.c_str(); //返回所有异常内容指针
}
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中
{
// TODO demangle funcion name with abi::__cxa_demangle
stack_.append(strings[i]);
stack_.push_back('\n');
}
free(strings);
}
}
本文介绍了一个自定义异常处理类的设计实现,该类继承自标准异常类,并提供了异常信息及堆栈跟踪的功能。通过构造函数传入异常消息并在成员函数中填充堆栈跟踪信息,能够帮助开发者快速定位和解决问题。
 Exception&spm=1001.2101.3001.5002&articleId=80225102&d=1&t=3&u=9116713b02134c6890a5829b686edf99)
386

被折叠的 条评论
为什么被折叠?



