xcode debugging ios assertion

xcode - Aparece un mensaje extraño en el depurador: Falló la aserción:(cls), función getName: ¿qué es esto?



debugging ios (6)

Me encontré con esto, y esta es la razón por la que sucedió la mía: había usado +localizedStringFromDate:dateStyle:timeStyle: en mi código. Funcionó bien en el iPhone, pero no está disponible antes del SDK 4.0, por lo que tosió en el iPad. Vea si está llamando a alguna rutina que ya no está disponible en el SDK o está disponible solo en versiones posteriores. Francamente, no puedo esperar por 4.1 en el iPad!

-Owen

Desde que actualicé de Xcode 3.2.3 a 3.2.4 y iOS 4.0.1 a iOS 4.1 SDK, cuando establezco un punto de interrupción en mi código e instrucciones de un solo paso, en cada paso, el depurador escupirá uno o más de eso línea:

Assertion failed: (cls), function getName, file /SourceCache/objc4_Sim/objc4-427.1.1/runtime/objc-runtime-new.m, line 3939

No sucede en una línea específica o para instrucciones específicas. Tengo algunos puntos de interrupción en mi código y cada vez que golpeo uno de ellos, el depurador comienza a arrojar esos mensajes. No parece tener ningún efecto perjudicial ya que el programa funciona correctamente. Es muy molesto recuperar la información en la consola cuando hay decenas de esas líneas. Estoy seguro de que no se muestran para nada, pero no he encontrado cuál podría ser el problema y qué instrucciones podrían causarlo. Si no llego a un punto de interrupción, entonces no veo ninguna de esas líneas. Limpié y reconstruí mi proyecto varias veces sin éxito.

¿Alguien tiene alguna idea de qué es esto?


También tengo el mismo problema; No tengo una solución pero puedo solucionarla. En resumen, te sugiero que agregues más puntos de ruptura ...

Noté en la pila de llamadas que en realidad es el depurador el que se está comportando mal. La función gdb_class_getClass llama a getName , presumiblemente esto pasa NULL en lugar de (por ejemplo) MyClass. El código que estoy tratando de depurar es un método de MyClass. Entonces, pensando que el depurador tiene un problema con MyClass, establecí un punto de interrupción en una línea fuera de cualquier código de MyClass (es decir, la línea que llama al método en MyClass) y presiono continuar cuando el programa se rompe. Esto parece resolver el problema en mi caso. (Tenga en cuenta que el auto-continuar no funciona).

Para ser claro:

//Set breakpoint here [myClassInstance buggyMethod];

Mi buggyMethod está realmente en otro archivo:

... -(void)buggyMethod { //This is where I set my ''real'' breakpoint

Espero que ayude.


También tengo este problema, en una aplicación para iPad escrita originalmente en Xcode 3.2.4 con el SDK de iOS 3.2, que ahora se está depurando en Xcode 3.2.5 con el SDK de 4.2, pero solo cuando configuro el simulador en la implementación de iOS 3.2 Objetivo (por lo que puedo correr en el simulador 3.2). Cada parada en un punto de interrupción en el depurador, hago que esta afirmación se repita ocho veces. Un solo paso sobre una línea obtiene dos más.

Lo que no entiendo es que no he agregado ningún código al proyecto desde la última vez que lo ejecuté en Xcode 3.2.4 y iOS SDK 3.2, por lo que no puedo agregar ninguna llamada que no estuviera presente en ese SDK. no habría compilado

Hasta que alguien encuentre una respuesta a esto, creo que la única solución alternativa (para poder continuar depurando mi código en un entorno 3.2) es reinstalar Xcode 3.2.4 y usar el SDK 3.2 y el simulador.


Tengo exactamente el mismo problema. Sé que no es la respuesta completa, pero esto es lo que pude encontrar.

La función relevante getName se ve así:

/*********************************************************************** * getName * fixme * Locking: runtimeLock must be held by the caller **********************************************************************/ static const char * getName(struct class_t *cls) { // fixme hack rwlock_assert_writing(&runtimeLock); assert(cls); if (isRealized(cls)) { return cls->data->ro->name; } else { return ((const struct class_ro_t *)cls->data)->name; } }

Entonces, gdb se está quejando de que la afirmación de aserción (cls) está fallando. Lo que significa que getName de alguna manera obtiene un puntero NULL como argumento.

Que es algo gracioso, ¿dónde podríamos estar pidiendo el nombre de una clase NULL?

Espero que esto ayude...


Tengo un problema similar, pero el mío es crear una vista personalizada con Core Text en ella. Tan pronto como el drawRect de mi vista llama a la línea

CTFontRef titleFont = CTFontCreateWithName(CFSTR("Baskerville"), 40.0f, NULL);

Cuelga la aplicación, ya sea en el simulador o en el dispositivo. Curiosamente, puedo corregirlo asignando otro componente de texto UIKit en el método viewDidLoad del controlador de vista ... Ni siquiera tengo que agregarlo como una subvista. Es como si necesitara cargar algunos elementos de texto comunes antes de que Core Text pueda cargar fuentes.

- (void)viewDidLoad { [super viewDidLoad]; UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; }

Extraño.


Tuve este problema cuando estaba corriendo en el simulador "iPad 3.2 simulator". Este problema desapareció cuando cambié el simulador a "iPad 4.3 simulator"