【发布时间】:2014-12-13 08:47:17
【问题描述】:
我正在尝试使用异常捕获重新抛出来调试我的应用程序。我的异常处理代码比我正在调试的一些块要长,而且都是复制粘贴的。
有没有更好的方法来重复表达下面的代码?我怀疑宏是这里的方法,但我通常会避免使用像瘟疫这样的宏。
try {
// Code here...
}
catch (std::exception & e)
{
ErrorMsgLog::Log("Error", "std exception caught in " __func__ " " __FILE__ " " __LINE__, e.what());
throw e;
}
catch (Exception & e)
{
ErrorMsgLog::Log("Error", "Builder exception caught in " __func__ " " __FILE__ " " __LINE__, e.Message);
throw e;
}
catch (...)
{
ErrorMsgLog::Log("Error", "Unknown exception caught in " __func__ " " __FILE__ " " __LINE__);
throw std::runtime_error ("Unknown Exception in " __func__ " " __FILE__ " " __LINE__);
}
【问题讨论】:
-
forward模板化函数的所有异常? -
使
Exception成为std::exception的子类型,就像任何正常的异常类型一样。 -
由于您要避免使用宏,我可以建议您将整个应用程序代码封装在这个
try catch块中吗?这样,您只需要使用简单的try catch(...)块来封装引发异常的代码块,该块只会执行throw;,直到它到达主要的try catch块。 -
您是否考虑过在抛出而不是在捕获异常时记录异常?至少你可以让
__FILE__和__LINE__有用。顺便说一句,您在记录的消息中撒谎,实际上您并没有抓住它。 -
您提出的问题有一个非常干净的解决方案。看看stackoverflow.com/questions/847279/… 接受的答案。