如何捕捉"Fatal signal 11 (SIGSEGV)"?



在我的安卓OpenGL ES项目中,我最近在着色器代码中遇到了一个错误,这显然导致了OpenGL线程中的"致命信号11(SIGSEGV(":

GLES32.glCompileShader(glShaderHandle);

我解决了错误,它再次工作正常,但我很难找出该错误的来源。当然,我尝试"捕获"着色器错误,如下所示:

GLES32.glGetShaderiv(glShaderHandle, GLES32.GL_COMPILE_STATUS, result, 0);

但是在SIGSEGV错误的情况下,java代码甚至没有达到这一点。尝试使用try/catch捕获错误也不起作用。应用程序仍然崩溃。我想错误发生在本机 c 代码中。

有没有办法处理来自java代码的此类错误以防止应用程序崩溃?

你抓不到它。 这是一个段错误。 它在 C 中崩溃。 它不会变成 Java 堆栈跟踪,它被 linux 视为硬错误,应用程序会立即终止。

你也许可以编写一个 C 信号处理程序并进行一些处理,但我真的不推荐它。 从这一点开始,您将无法以任何方式继续应用,因为应用程序现在处于未定义的行为状态。

如果您确实想尝试这样做(我真的不建议这样做(,请阅读如何编写信号处理程序来捕获 SIGSEGV?以获取问题的概述。

相关内容

  • 没有找到相关文章

最新更新