捕获我在Objective-C中调用的C++函数的异常?

use*_*085 6 c++ exception-handling objective-c ios

我的iPad应用程序使用Objective-C for UI,它调用一些C++函数进行计算.由于C++代码编写得不好,因此单独测试时有时会抛出异常或导致分段错误.但是,C++代码目前正由其他人开发,因此我不想更改它.是否有可能在Objective-C代码中捕获异常和分段错误,这样我就不需要更改C++代码了?我尝试了基本的try-catch,但似乎无法正常工作.(包装器是有缺陷的c ++函数)

@try {
    wrapper([imageName UTF8String]);
}
@catch (NSException *e) {
    NSLog(@"Error");
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序并单击调用C++函数的按钮时,模拟崩溃并显示错误消息 libc++abi.dylib: terminating with uncaught exception of type NSException

Bry*_*hen 8

你可以使用C++ try-catch与Objective-C++代码(.mm扩展名)

try {
    wrapper([imageName UTF8String]);
}
catch (...) {
    NSLog(@"Error");
}
Run Code Online (Sandbox Code Playgroud)

在64位进程中,您可以使用@catch(...)来捕获包括C++异常在内的所有内容

@try {
    wrapper([imageName UTF8String]);
}
@catch (...) {
    NSLog(@"Error");
}
Run Code Online (Sandbox Code Playgroud)


bsa*_*007 1

您可以在文件中编写 cpp 代码(扩展名为 .mm 而不是 .m),并使用 C++ try/catch,如下所示:

#include <stdexcept>

try
{
    wrapper([imageName UTF8String]);
}
catch (const std::exception & e)
{
    NSLog(@"Error");
}
Run Code Online (Sandbox Code Playgroud)