¿Cómo capturar "Fatal señal 11 (SIGSEGV)"?

theCNG27:

En mi proyecto de OpenGL ES androide recientemente he tenido un error en mi código de sombreado, que al parecer causó una "señal 11 (SIGSEGV)" en el hilo de OpenGL aquí:

GLES32.glCompileShader(glShaderHandle);

Me resuelto el error y funciona bien de nuevo, pero yo tenía un tiempo difícil averiguar dónde vino ese error de. Por supuesto trato de "captura" errores de sombreado como este:

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

Pero en el caso de que el error SIGSEGV, el código java ni siquiera llegar a ese punto. También tratar de detectar el error con el try / catch no funcionó. La aplicación falla de todos modos. Supongo que ocurre el error en código nativo c.

¿Hay una manera de controlar los errores de este tipo de código Java de mantener la aplicación de estrellarse?

Gabe Séchan:

No se puede cogerlo. Se trata de una violación de segmento. Es un accidente en C. no se convierta en un rastro de Java pila, su tratado como un fallo duro con Linux y la aplicación se termina inmediatamente.

Usted puede ser capaz de escribir un manejador de señales C y hacer algo de procesamiento, pero realmente no lo recomendaría. Y no sería capaz de continuar con la aplicación de alguna manera de este punto, ya que la aplicación se encuentra ahora en un comportamiento indefinido.

Si desea intentar que (realmente no sugieren que) leer Cómo escribir un manejador de señales a SIGSEGV truco? para una visión general de los temas.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=201148&siteId=1
Recomendado
Clasificación