我正在为C++应用程序构建一个错误处理机制。现在,我使用VectoredExceptionHandling完成了windows部分,我想知道在Solaris上是否有类似的概念。基本上,每当程序中的任何地方抛出异常时,我都希望有一个回调被调用。在windows下,您可以使用AddVectoredExceptionHandler()注册回调。如何在Solaris中做到这一点?
发布于 2011-09-09 17:36:21
不是100%,但你可以尝试模仿gdb的收集点的工作方式:参见http://www.delorie.com/gnu/docs/gdb/gdb_31.html关键信息如下:
“要在调用异常处理程序之前停止,您需要一些实现知识。在GNU C++的情况下,通过调用名为__raise_exception的库函数来引发异常,该库函数具有以下ANSI接口:
/* 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。
https://stackoverflow.com/questions/7358588
复制相似问题