最近遇到一个问题,线下代码测试没问题,线上偶发性崩溃,所以加了一个异常捕获来分析问题类型,基本实现如下:
#include <stdexcept>
try{
fun();
}
catch(exception& e){ // 这里可以捕获继承自exception的各种异常类
cout<<e.what()<<endl;
}
catch(...){
cout<<"unknown error\n";
}
如果仅仅为了调试,查看异常类型(标准库异常),上面的写法就足够了,因为所有继承自class exception的c++标准库子类都可以通过 命令 catch(exception& e)来捕获和通过虚函数what()来查看异常类型。需要针对异常类型做处理则可以捕获特定类型的异常,c++标准库部分异常类如下:
--------------------------------------------------------------------------------------------------------------------------------
图 exception类及其子类(并未列全)
---------------------------------------------------------------------------------------------------------------------------------
class logic_error: 逻辑错误, 继承自class exception。有如下子类:
class domain_error:定义域错误,比如反正弦函数