调用glCreateProgram时无法调试Android崩溃

时间:2014-09-29 20:02:35

标签: android opengl-es android-ndk

我试图将我的游戏移植到Android上。到目前为止,我已经编译了.so文件的所有依赖项,包括我的游戏引擎代码,然后我已经从主应用程序链接到这些共享库。

当我通过模拟器启动应用程序时,程序开始加载但在调用glCreateProgram时崩溃:

I/DEBUG   (   34): Build fingerprint: 'generic/sdk/generic:4.3/JB_MR2/774058:eng/test-keys'
I/DEBUG   (   34): Revision: '0'
I/DEBUG   (   34): pid: 873, tid: 900, name: UNKNOWN  >>> com.indgames.rocks <<<
I/DEBUG   (   34): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000048
I/DEBUG   (   34):     r0 00000048  r1 00000001  r2 4d95ea24  r3 00000004
I/DEBUG   (   34):     r4 00000048  r5 00000001  r6 4d960528  r7 00000018
I/DEBUG   (   34):     r8 4d960c28  r9 4d860fb8  sl 2a20bc08  fp 4d95ea98
I/DEBUG   (   34):     ip 4d422f20  sp 4d95e9e8  lr 4d41d637  pc 40034e4c  cpsr 20000010
I/DEBUG   (   34):     d0  417654683f800000  d1  417654683f800000
I/DEBUG   (   34):     d2  3fe7ce583f800000  d3  0000000000000000
I/DEBUG   (   34):     d4  0000000000000000  d5  3ff0000000000000
I/DEBUG   (   34):     d6  3fe0000000000000  d7  3fb3bd3c01654680
I/DEBUG   (   34):     d8  0000000000000000  d9  0000000000000000
I/DEBUG   (   34):     d10 0000000000000000  d11 0000000000000000
I/DEBUG   (   34):     d12 0000000000000000  d13 0000000000000000
I/DEBUG   (   34):     d14 0000000000000000  d15 0000000000000000
I/DEBUG   (   34):     scr 20000010
I/DEBUG   (   34): 
I/DEBUG   (   34): backtrace:
I/DEBUG   (   34):     #00  pc 0000de4c  /system/lib/libc.so
I/DEBUG   (   34):     #01  pc 00013633  /system/lib/libGLESv2_enc.so
I/DEBUG   (   34):     #02  pc 00013ad9  /system/lib/libGLESv2_enc.so (GLSharedGroup::addProgramData(unsigned int)+18)
I/DEBUG   (   34):     #03  pc 0000aa1b  /system/lib/libGLESv2_enc.so (GL2Encoder::s_glCreateProgram(void*)+20)
I/DEBUG   (   34):     #04  pc 00004eb5  /system/lib/egl/libGLESv2_emulation.so (glCreateProgram+14)
I/DEBUG   (   34):     #05  pc 003cb690  /data/app-lib/com.indgames.rocks-2/libkglt.so (_ZN9GLChecker7CheckerIjRFjvEJEE3runES2_+16)
I/DEBUG   (   34): 
I/DEBUG   (   34): stack:
I/DEBUG   (   34):          4d95e9a8  00000000  
I/DEBUG   (   34):          4d95e9ac  4d95ea08  
I/DEBUG   (   34):          4d95e9b0  4d95e9e8  
I/DEBUG   (   34):          4d95e9b4  4d95e9d8  
I/DEBUG   (   34):          4d95e9b8  2a250568  [heap]
I/DEBUG   (   34):          4d95e9bc  00000000  
I/DEBUG   (   34):          4d95e9c0  2a250088  [heap]
I/DEBUG   (   34):          4d95e9c4  2a250088  [heap]
I/DEBUG   (   34):          4d95e9c8  00000041  
I/DEBUG   (   34):          4d95e9cc  00000020  
I/DEBUG   (   34):          4d95e9d0  2a250938  [heap]
I/DEBUG   (   34):          4d95e9d4  4d95e9a8  
I/DEBUG   (   34):          4d95e9d8  00000041  
I/DEBUG   (   34):          4d95e9dc  00000020  
I/DEBUG   (   34):          4d95e9e0  df0027ad  
I/DEBUG   (   34):          4d95e9e4  00000000  
I/DEBUG   (   34):     #00  4d95e9e8  00000000  
I/DEBUG   (   34):          4d95e9ec  00000001  
I/DEBUG   (   34):          4d95e9f0  4d960528  
I/DEBUG   (   34):          4d95e9f4  00000018  
I/DEBUG   (   34):          4d95e9f8  4d960c28  
I/DEBUG   (   34):          4d95e9fc  4d41d637  /system/lib/libGLESv2_enc.so
I/DEBUG   (   34):     #01  4d95ea00  00000004  
I/DEBUG   (   34):          4d95ea04  4d41dadd  /system/lib/libGLESv2_enc.so (GLSharedGroup::addProgramData(unsigned int)+22)
I/DEBUG   (   34):     #02  4d95ea08  2a224fc0  [heap]
I/DEBUG   (   34):          4d95ea0c  00000048  
I/DEBUG   (   34):          4d95ea10  4d960528  
I/DEBUG   (   34):          4d95ea14  4d41a6d7  /system/lib/libGLESv2_enc.so (glCreateProgram_enc+46)
I/DEBUG   (   34):          4d95ea18  2a22b3d8  [heap]
I/DEBUG   (   34):          4d95ea1c  00000001  
I/DEBUG   (   34):          4d95ea20  2a22b3d8  [heap]
I/DEBUG   (   34):          4d95ea24  4d960528  
I/DEBUG   (   34):          4d95ea28  4d9602b8  
I/DEBUG   (   34):          4d95ea2c  4d414a1f  /system/lib/libGLESv2_enc.so (GL2Encoder::s_glCreateProgram(void*)+24)

这里的第一个奇怪的事情是堆栈跟踪列出了GLESv2,当我使用GLESv3的时候,第二个是如果我使用ndk-gdb,我根本看不到堆栈跟踪......

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 968]
0x40034e4c in ?? () from /home/kazade/Git/rocks-android/obj/local/armeabi-v7a/libc.so
(gdb) bt
#0  0x40034e4c in ?? () from /home/kazade/Git/rocks-android/obj/local/armeabi-v7a/libc.so
#1  0x4d41d636 in ?? ()
#2  0x4d41d636 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) 

如何获取更多调试信息以找出发生此类崩溃的原因?

此外,即使我已指定

,GL调用通过GLESv2.so也是正常的
<uses-feature android:glEsVersion="0x00030000" />

在我的AndroidManifest.xml中?

1 个答案:

答案 0 :(得分:0)

我认为这与SDL 2.0没有正确支持GLES 3有关。将我的代码改为兼容GLES 2会使问题消失。