gpt4 book ai didi

c - C 中的异常处理 - 从 Java JNI 捕获 native C 崩溃

转载 作者:行者123 更新时间:2023-12-02 07:01:15 28 4
gpt4 key购买 nike

我是一名 Java 程序员,正在编写调用 native C 代码的 JNI 应用程序。我想要的是从调用 native 代码的 Java 代码中检测 native 程序崩溃。

我知道 C 中没有异常处理,但只是好奇我是否可以在 Java 中的 try-catch block 中“安全地”编写危险代码(例如,运行时可能包含错误指针的代码或未找到文件的情况)。在那种情况下,代码会崩溃,但我一直在寻找一种安全的方式来报告它。

最佳答案

我相信您采用了错误的方法。作为 C 语言,“请求宽恕比获得许可更好。”必须在 C 中请求许可,尽管在发生灾难时,你当然可以做一些清理:

你应该看看 signal handling .

当你做类似的事情时

int *a = NULL;
int b = *a; //segfault

您的程序将收到 SIGSEGV,这将强制您的程序退出,除非您安装了信号处理程序。

大多数未处理的信号将导致程序终止,并且大多数可以被捕获(例如 SIGKILL 无法被捕获)。

这允许您进行一些清理工作。

#include <signal.h>
#include <stdio.h>

//typedef void (*sighandler_t)(int);

void myhandler(int signal){
printf("oh noes...\n");
}
int main(void)
{
signal(SIGSEGV, myhandler);
int *a = NULL;
int b = *a; //segfault
return 0;
}

不过这些都不推荐。您必须始终知道指针的内容。否则,巨人会夷平你的村庄。

编辑:建议将signal() 函数弃用。新代码应该使用 [sigaction()][2] 代替。为简单起见,此示例使用 signal()

关于c - C 中的异常处理 - 从 Java JNI 捕获 native C 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20342403/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com