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