无法捕获的自定义异常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)上进行开发。到目前为止,我将不接受答案。 谢谢大家的帮助。     
已邀请:
        如果
catch (...)
(在同一线程中的封闭函数中)无法处理,那么您的崩溃根本不是由未捕获的异常引发的。 (注意:即使已经捕获到异常,也有可能引发该异常并终止该程序。从析构函数中抛出或违反
throws
子句是发生这种情况的两种方法。)     
        如果从main内部抛出自定义异常并可以捕获它,那么您必须在调用堆栈中的某个位置展示UB,这将导致无法捕获后面的异常。     
        我有类似的问题。 我在使用gcc47(macports)的Mac OSX 10.8(Mountain Lion)上使用QT。 在QT主体中,我从共享库中调用了一个方法,该方法引发了该共享库中定义的异常。无论我在方法调用周围放置哪种try-catch(捕获异常,捕获基数,甚至捕获(...)),总是调用终止处理程序,这导致我的程序中止。无法捕捉到异常。 首先,我在链接期间尝试了-shared-libgcc选项。否则,这不是问题,catch(...)子句会起作用。 然后,我使用与共享库链接的手写makefile编写了一个没有QT的简单主程序。那行得通! 我得出的结论是问题是由于传递给gcc的选项不同(即QT / qmake生成的makefile和我的手写文件之间的差异)引起的。 经过一些二进制搜索后,我发现以下选项导致了我的问题(链接时):
-mmacosx-version-min=10.5
将其更改为以下内容之后:
-mmacosx-version-min=10.6,
一切都按预期进行。 我不知道为什么在10.6中指定选项可以解决此问题。有什么想法吗?     

要回复问题请先登录注册