C++ Winsock2+;C+中的OpenSSL+;:我怎样才能捕捉到他们的异常?
我想捕获在使用Winsock2和OpenSSL加密的套接字时引发的异常,但我不知道如何做到这一点。在C++中,我只能捕捉基类异常,但是在C++中,用“catch(STD::Exchange E)”捕获它们是行不通的。它只适用于“catch(…)”,但我需要一些对象来获取详细信息 < C++ >不可能通过为基类STD创建一个catch块来捕获每种异常,或者异常是从其他基类派生的异常吗?< /P> 干杯C++ Winsock2+;C+中的OpenSSL+;:我怎样才能捕捉到他们的异常?,c++,windows,sockets,exception,openssl,C++,Windows,Sockets,Exception,Openssl,我想捕获在使用Winsock2和OpenSSL加密的套接字时引发的异常,但我不知道如何做到这一点。在C++中,我只能捕捉基类异常,但是在C++中,用“catch(STD::Exchange E)”捕获它们是行不通的。它只适用于“catch(…)”,但我需要一些对象来获取详细信息 < C++ >不可能通过为基类STD创建一个catch块来捕获每种异常,或者异常是从其他基类派生的异常吗?< /P> 干杯 Alex在OpenSSL中,当发生错误时,更详细的信息存储在“错误队列”中。使用错误队列可以做的
Alex在OpenSSL中,当发生错误时,更详细的信息存储在“错误队列”中。使用错误队列可以做的最简单的事情是打印整个队列。可以使用
ERR\u print\u errors\u fp()
打印错误队列。你使用C++包装器吗?请注意,C++异常在大多数情况下是框架特定的。有许多例子表明,框架异常不是从std::exception
派生的。例如,在MFC中,所有异常都源自CException
,它与OpenSSL中的std::exception
无关。当发生错误时,更详细的信息存储在“错误队列”中。使用错误队列可以做的最简单的事情是打印整个队列。可以使用ERR\u print\u errors\u fp()
打印错误队列。你使用C++包装器吗?请注意,C++异常在大多数情况下是框架特定的。有许多例子表明,框架异常不是从std::exception
派生的。例如在MFC中,所有异常都是从<代码> cExabor <代码>导出的,这与<代码> STD::异常< /C> > < < /P> > P>您甚至可以在C++中将一个整数作为“异常对象”抛出。所以没有用于异常的公共基类。
您必须查看正在使用的库文档,并搜索可能的异常。
如果使用VisualStudio,则可以告诉调试器停止,当异常抛出(主菜单>调试->异常……或只查看您的“输出窗口”并搜索抛出的异常类型)。C++中,您甚至可以在C++中将整数作为“异常对象”抛出。所以没有用于异常的公共基类。 您必须查看正在使用的库文档,并搜索可能的异常。
如果使用VisualStudio,则可以告诉调试器停止,当异常抛出(主菜单>调试->异常…或查看您的“输出窗口”并搜索抛出的异常类型)。据我所知,Winsock和OpenSSL是基于C的项目,因此不要抛出C++异常。 也就是说,这些项目有可能引发结构化异常。例如,如果将坏缓冲区传递给这些项目之一导出的函数,操作系统可能会引发访问冲突异常
虽然可能,但您可能不想——引发异常的应用程序的状态可能不一致。
< P>据我所知,Winsock和OpenSSL是基于C的项目,因此不抛出C++异常。 也就是说,这些项目有可能引发结构化异常。例如,如果将坏缓冲区传递给这些项目之一导出的函数,操作系统可能会引发访问冲突异常虽然可能,但您可能不希望-引发异常的应用程序的状态可能不一致。谢谢,当未知错误再次发生时,我会记住这一点。谢谢,当未知错误再次发生时,我会记住这一点。谢谢,当未知错误再次发生时,我会记住这一点。关于包装:我从类对象的方法中调用这些函数,并将各种连接相关参数保留为成员变量,但我不确定这是否完全符合包装的定义。谢谢,当未知错误再次发生时,我会记住这一点。关于包装:我从类对象的方法中调用这些函数,并将各种与连接相关的参数保留为成员变量,但我不确定这是否完全符合包装的定义。