Winsock2 + OpenSSL in C++:我如何捕获它们的异常
Winsock2 + OpenSSL in C++: How can I catch their exceptions?
我想捕获使用Winsock2和OpenSSL加密的套接字时引发的异常,但我不知道该怎么做。在 C# 中,我可以只捕获基类 Exception,但在C++中,试图用"catch(std::exception e("捕获它们只是不起作用。它仅适用于"catch(...(",但我需要一些对象来获取详细信息。
C++是否不可能通过为基类 std::exception 创建一个 catch 块来捕获每种异常,或者我是否获得了从其他基类派生的异常?
干杯亚历克斯
据我所知,winsock 和 OpenSSL 是基于 C 的项目,因此不会抛出C++异常。
也就是说,这些项目可能会引发结构化异常。 例如,如果将错误的缓冲区传递给其中一个项目导出的函数,则操作系统可能会引发访问冲突异常。
虽然可能会捕获此类异常,但您可能不希望这样做 - 引发异常的应用程序的状态可能不一致。
在OpenSSL中,当发生错误时,更详细的信息存储在"错误队列"中。使用错误队列可以做的最简单的事情是打印整个队列。这可以通过ERR_print_errors_fp()
打印错误队列来完成。您是否在它周围使用C++包装器?请注意,在大多数情况下,C++例外是特定于框架的。有许多示例,其中框架异常不是从std::exception
派生的。例如,在 MFC 中,所有异常都派生自与std::exception
无关的CException
。
你甚至可以在 c++ 中抛出一个整数作为"异常对象"。所以。。。异常没有公共基类。您必须查看正在使用的库文档,并搜索可能的异常。如果您使用的是Visual Studio,则可以在引发异常时告诉调试器停止(主菜单->调试->异常...或者只是查看您的"输出窗口"并搜索抛出的异常类型(。
- 当类定义不可见时捕获异常
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- 如何通过 pybind11 从 python 中的C++中捕获异常?
- 信号后未捕获异常
- 捕获异常后如何退出程序执行
- C++ 捕获异常后进行清理的标准方法是什么?
- 使用模板类引发和捕获异常
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- 如果在生成 std::thread 后引发,则未捕获异常
- C++ 未捕获异常,程序将终止并中止
- C++程序在第一次尝试时会给出垃圾,但如果它捕获异常并重试,则会给出适当的值
- 仅捕获异常就可以检测所有二进制文件在C 中读取错误是否足够
- 如何捕获 I/O 异常(确切地说是 I/O,而不是 std::exception)
- 为什么捕获异常播放允许尾括号
- throw() 函数应该总是在异常时展开堆栈并允许捕获异常还是必须调用 std::terminate ?
- 寻求与类型为 std::invalid_argument 的未捕获异常相关的运行时错误的建议: stoi:无转换
- 如何从调用函数中捕获异常
- 当用户在字符数组中输入整数值时捕获异常
- C++按值捕获异常时的示例是不好的
- 使用 -O2 或 -O3 标志编译时未捕获异常