无法捕获的自定义异常C ++
|
这使我整夜疯了。
class ExceptionImpl;
/**
* Custom Exception.
*/
class Exception : public virtual std::exception
{
public:
Exception( const Exception& original );
Exception( const std::string& message );
virtual ~Exception( void ) throw( );
virtual const char* what( void ) const throw( );
private:
const std::unique_ptr< ExceptionImpl > m_pimpl;
};
我从库中抛出此自定义异常,如下所示
throw Exception( \"Error message\" );
并通过主要捕获它
try
{
regex pattern(R\"(a*)\");
Id::set_pattern_validator(pattern);
assert(false);
}
catch( Exception const& exception )
{
assert(true);
}
“ 3”是库的ID类中的静态方法,也是异常的来源。我已尽一切努力捕获异常,但未能捕获。
catch( Exception )
catch( std::exception )
catch( ... )
Nada!
终端输出如下。
\“抛出\'Exception \'what()实例后终止调用:模式验证器一旦设置就无法更改。中止陷阱。
现在我只好牺牲一只山羊,我不知所措,下一步该怎么尝试...任何提示/技巧???
注意:如果我在main中抛出自定义异常,则可以毫无问题地捕获它。
使用带有C ++ 0x支持的GCC的Mac OS X环境。
编辑:目前的解决方案是继续在基于Linux的系统(Fedora)上进行开发。到目前为止,我将不接受答案。
谢谢大家的帮助。
没有找到相关结果
已邀请:
3 个回复
财沟项胶
(在同一线程中的封闭函数中)无法处理,那么您的崩溃根本不是由未捕获的异常引发的。 (注意:即使已经捕获到异常,也有可能引发该异常并终止该程序。从析构函数中抛出或违反
子句是发生这种情况的两种方法。)
阀傻
骂陋冠
将其更改为以下内容之后:
一切都按预期进行。 我不知道为什么在10.6中指定选项可以解决此问题。有什么想法吗?