簡體   English   中英

如何在 iOS Objective-C 中捕獲 C++ 異常代碼?

[英]How to catch C++ exception code in iOS Objective-C?

我是 iOS 編程的新手,現在我遇到了一個與捕獲 C++ 類拋出的異常代碼相關的問題。

    @try {
        myCPPClass myObj ; //this throws integer exception codes
    }
    @catch (...) { //I want to catch the integer value here, how ??
        NSLog(@"Exception:") ;
    }
    @finally {
    } 

我知道以異常捕獲風格編碼 Objective-C 可能不是一個好習慣,我想知道如何在 Objective-C 中為 C++ 類創建自定義異常類?

將您的 Objective-c .m源文件重命名為具有.mm擴展名。 然后它們將被編譯為與 Objective-c 完全兼容的 Objective-C++,同時提供 C++ 的所有功能。

然后你可以用通常的方法捕獲 c++ 異常

try {
   ...
}
catch(std::exception& e) {
   ...
}

構造。

對於那些仍然沒有從 C++ 中捕獲任何異常的人來說,Richard 的答案的擴展。

使用它而不是try catch

@try { } 
@catch (...) {
  NSLog(@"Exception:");
}

為什么?

采用動態類型異常對象 (@catch(id exception)) 的 Objective-C catch 子句可以捕獲任何 Objective-C 異常,但不能捕獲任何 C++ 異常。 因此,為了互操作性,使用@catch(...) 來捕獲每個異常並使用@throw; 重新拋出捕獲的異常。 在 32 位中,@catch(...) 與 @catch(id exception) 具有相同的效果。

- C++ 互操作性

仍然沒有發現任何異常?

  • 不要指定-no_compact_unwind標志。
  • 如果您包含純 C 代碼,請指定 -funwind-tables 標志。

- 解決語言異常崩潰

暫無
暫無

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

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