簡體   English   中英

C ++中的Winsock2 + OpenSSL:如何捕獲它們的異常?

[英]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派生框架std::exception 例如,在MFC中,所有異常都源自CException ,它與std::exception無關。

您甚至可以在c ++中將整數作為“異常對象”拋出。 所以……沒有通用的例外基類。 您將必須查看正在使用的庫文檔,並搜索可能的異常。 如果您使用的是Visual Studio,則可以告訴調試器在引發異常時停止(主菜單->調試->異常...或只是查看“輸出窗口”並搜索引發的異常類型)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM