我想捕获从Winsock2使用OpenSSL加密的套接字时引发的异常,但我无法弄清楚如何做到这一点。在C#中我可以捕获基类Exception,但是在C ++中尝试使用" catch(std :: exception e)"来捕获它们。只是不起作用。它只适用于" catch(...)",但我需要一些对象来获取细节。
C ++中是否无法通过为基类std :: exception创建catch块来捕获每种异常,或者我是否从其他基类派生异常?
干杯 亚历
答案 0 :(得分:2)
据我所知,winsock和OpenSSL是基于C的项目,因此不会抛出C ++异常。
也就是说,这些项目可能引发结构化异常。例如,如果将错误的缓冲区传递给由这些项目之一导出的函数,则操作系统可能会引发访问冲突异常。
虽然可能catch such exceptions,但您可能不想 - 引发异常的应用程序状态可能不一致。
答案 1 :(得分:1)
在OpenSSL发生错误时,更详细的信息存储在"错误队列"中。您可以使用错误队列执行的最简单操作是打印整个队列。这可以使用ERR_print_errors_fp()
来打印错误队列。你在使用C ++包装吗?请注意,在大多数情况下,C ++异常是特定于框架的。有许多示例表明框架异常不是从std::exception
派生的。例如,在MFC中,所有异常都来自CException
,与std::exception
无关。
答案 2 :(得分:1)
你甚至可以在c ++中将整数作为“异常对象”抛出。所以...异常没有共同的基类。 您将不得不查看您正在使用的库文档,并搜索可能的异常。 如果您使用的是Visual Studio,则可以告诉调试器在抛出异常时停止(主菜单 - > Debug-> Exceptions ...或者只是查看“输出窗口”并搜索抛出的异常类型)。