7

我是这里的新手和 iphone 应用程序开发人员。有时我在通过模拟器运行我的应用程序时看到此错误和应用程序崩溃。使用 xcode 4.4.1、Mountain Lion、iOS 5.1。

我猜这是与运行时间相关的错误,因为它在运行应用程序几秒(超过 30 秒)后发生。我该如何检测和解决这个问题?

感谢您的关注。

嗯..我无法上传我的捕获图像

线程 1

0 0x0eae45e6

7 glDrawElements

8 -[CCTextureAtlas drawNumberOfQuads..

9 -[CCTextureAtlas drawQuads]

10 -[CCSpriteBatchNode 绘制]

11 -[CCTMX图层抽奖]

12 -【CCSpriteBatchNode访问】

13 -【CCNode访问】

14 -【CCNode访问】

15 -【CCNode访问】

16 - [CCDirectorIOS drawScene]

17 -[CCDirectorDisplayLink 主循环:]

18 CA::Display::DisplayLink::dispatch(...

27 UIApplicationMain

28 主

29 开始

编辑器窗口错误

0xeae45e6: 移动 %xmm4, -2472(%ebp) <<<<<

线程 1:EXC_???(11)(code=0, subcode=0x0)

0xeae45ed: movaps 64(%edi), %xmm4

0xeae45f1: 移动 %xmm4, %xmm5

0xeae45f4: mulps %xmm1, %xmm5

0xeae45f7: 添加 64(%eax), %xmm5

0xeae45fb: 移动 %xmm5, -2456(%ebp)

0xeae4602: 移动 %xmm5, %xmm6

4

5 回答 5

2

我会说这是一个内存问题:

  1. 在您的代码中的某个地方,您可能正在破坏内存 - 检查您访问数组的那些地方(是否超出范围读取),创建格式化字符串,释放对象。

  2. 尝试使用仪器并检查内存——也许你很快就会在其他地方泄漏它。

于 2012-08-17T12:34:42.390 回答
2

我得到了这个确切的EXC_???(11) 错误相当一致。

在我的情况下,它是多线程编码错误 - 在一个线程上访问的类成员之一也被另一个线程修改(初始化...释放...)。这意味着代码正在访问一个已经发布或完全重新创建的实例。

因此,在适用的情况下添加 @synchronized 可以修复错误。

于 2012-08-28T07:07:10.883 回答
1

转到CCDirectorCCDirectoriOS ,无论您使用的是什么......然后添加

@implementation CCDirectorDisplayLink


-(void) mainLoop:(id)sender
{
   if(displayLink_)//Crash fix
      [self drawScene];
}

它应该修复崩溃..

于 2012-11-27T05:18:19.600 回答
0

此错误是由于通过 xcode 以外的其他方式安装了应用程序,然后尝试使用 xcode 运行造成的。

于 2013-04-11T06:03:32.523 回答
0

强烈怀疑当您忘记禁用不属于当前着色器的顶点属性时会引发此异常。

尝试运行此功能:

  // debug
  static void PrintAllActiveAttributes()
  {
    int maxAttribs ;
    glGetIntegerv( GL_MAX_VERTEX_ATTRIBS, &maxAttribs ) ;
    for( int i = 0 ; i < maxAttribs ; i++ )
    {
      int enabled ;
      glGetVertexAttribiv( i, GL_VERTEX_ATTRIB_ARRAY_ENABLED, &enabled ) ;
      if( enabled )  printf( "INDEX %d ENABLED\n", i ) ;
    }
  }

如果您没有禁用之前绑定的着色器使用的某些属性(通过调用glDisableVertexAttribArray),那么这些属性仍将处于活动状态,即使当前绑定的顶点缓冲区不使用它。我相信这会导致一些内存 OOB 异常被抛出。

于 2013-07-08T21:35:15.103 回答