美文网首页
Android EGL 错误信息定位方法

Android EGL 错误信息定位方法

作者: 1999c1b720cd | 来源:发表于2018-09-09 12:04 被阅读0次

问题

使用 OpenGL 开发过程当中可能会遇到需要理解一些关键错误日志 log 的意思,比如

09-09 09:18:07.915 30493-30493/xx E/libEGL: eglTerminate:321 error 3008 (EGL_BAD_DISPLAY)
09-09 09:32:57.142 31015-31015/xx E/libEGL: validate_display:92 error 3008 (EGL_BAD_DISPLAY)

我们得结合源码分析背后在干一件什么事情

解决方案

  • 了解 EGL 和 OpenGL API 在 Android 中基本处理流程,如 Java API 进入 JNI API,再调用 Native 具体实现 API,也就是接口可能会对应不同的实现

  • 对于 EGL 而言,基本流程是


    EGL API 调用流程
    • Java 层 android.opengl.EGL14
    • JNI 层 /frameworks/base/core/jni/com_google_android_gles_jni_EGLImpl.cpp
    • EGL 接口层 /frameworks/native/opengl/libs/EGL/eglApi.cpp
    • EGL 代理层 /frameworks/native/opengl/libs/EGL/egl.cpp
    • EGL 默认实现层 /frameworks/native/opengl/libagl/egl.cpp
    • EGL 厂商实现层 无源码
  • 根据 log 信息查找相应的源码

    • 例子一
      假如出现了 09-09 09:18:07.915 30493-30493/xx E/libEGL: eglTerminate:321 error 3008 (EGL_BAD_DISPLAY) 这样的 log,那怎么分析?
      (1)关键字 EGL_BAD_DISPLAY 说明参数 DISPLAY 错误,需要检查参数
      (2)在源码中搜索 “EGL_BAD_DISPLAY” 关键字,多次过滤无关信息,定位到 case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; 字符串匹配上了
      (3)查找该方法被谁谁调用,定位到是 egl_tls_t::setErrorEtcImpl
      (4)递归查找 egl_tls_t::setErrorEtc 函数输出的错误信息是哪个函数、哪一行
      (5)根据 eglTerminate:321 方法名和行号定位到在 /frameworks/native/opengl/libs/EGL/eglApi.cpp#324 出现了空指针输出的 log 信息
    • 例子二
      假如出现了 09-09 09:32:57.142 31015-31015/xx E/libEGL: validate_display:92 error 3008 (EGL_BAD_DISPLAY)
      (1)根据例子一的经验可以判断是 validate_display:92 出错
      (2)查找该方法的调用方,并结合 EGL 从上层到底层的基本处理流程和自己调用的函数可以判断是传入的参数为空指针导致

总结

  • log 中包含了丰富的信息说明当时的上下文
  • 在源码中根据 log 查找字符串、常量、关键字、函数等可以定位到具体出错函数和行号
  • 从上层到底层的信息处理流程不是一开始就会的,需要多次尝试、验证、总结才知道

相关文章

  • Android EGL 错误信息定位方法

    问题 使用 OpenGL 开发过程当中可能会遇到需要理解一些关键错误日志 log 的意思,比如 我们得结合源码分析...

  • Android createWindowSurface fail

    createWindowSurface failed EGL_BAD_ALLOC先看下Log: 错误信息为:cre...

  • Android EGL环境的搭建

    Android EGL环境的搭建 1.概述 1.1 EGL是什么? 想要了解EGL是什么,我觉得我们首先就必须要了...

  • Android GUI系统-SurfaceFlinger基础

    一、OpenGL ES与EGL Android的GUI系统是基于OpenGL/EGL来实现的。 由于OpenGL是...

  • Android中的OpenGL ES使用基础

    一、OpenGL/EGL 因为Android的GUI系统是基于OpenGL/EGL实现的,所以先介绍相关基础知识。...

  • GUI:egl

    《android内核设计框架》读书笔记 1.EGL 和 OpenGL ES EGL是图形渲染API(如OpenGL...

  • Android EGL

    部分内容摘自其他博客,请见最下[参考资料] 首先来看看Android官方对EGL的解释: OpenGL ES 定义...

  • Android EGL 接口使用方法

    背景 这段时间经常跟 OpenGL ES 和 EGL 打交道。在这整理记录 EGL 接口的使用方法,方便后续理解 ...

  • Android 高德地图返回错误码12的问题

    android手机忽然高德地图报错,错误码是12,错误信息是定位服务没有开启,请在设置中打开定位服务开关,仔细查看...

  • Android:egl例子

    egl的最基本流程代码,记录一下。 因为这个点比较大后续会更新: 基本概念: 一.离屏(offscreen)渲染 ...

网友评论

      本文标题:Android EGL 错误信息定位方法

      本文链接:https://www.haomeiwen.com/subject/elmrgftx.html