Solaris上的异常处理机制

时间:2011-09-09 07:49:10

标签: c++ exception-handling solaris

我正在为C ++应用程序构建错误处理机制。现在,我使用VectoredExceptionHandling完成了Windows部分,我想知道Solaris上是否有类似的概念。基本上,每当从程序中的任何地方抛出异常时,我想要一个叫回调的回调。在Windows下,您可以使用AddVectoredExceptionHandler()注册回调。我如何为Solaris执行此操作?

1 个答案:

答案 0 :(得分:1)

如果这样可行,则不是100%,但您可以尝试模仿gdb的捕获点的工作方式:请参阅http://www.delorie.com/gnu/docs/gdb/gdb_31.html关键信息是:

“要在调用异常处理程序之前停止,您需要了解实现。在GNU C ++的情况下,通过调用名为__raise_exception的库函数引发异常,该函数具有以下ANSI C接口:

/* addr is where the exception identifier is stored.
   id is the exception identifier.  */
void __raise_exception (void **addr, void *id);

要使调试器在任何堆栈展开之前捕获所有异常,请在__raise_exception上设置断点“

所以,我的猜测是你可以通过LD_PRELOAD技巧安装自己的__raise_exception。