2010-09-13 5 views
25

Поскольку я модернизировал от Xcode 3.2.3 до 3.2.4 и прошивки 4.0.1 для прошивки 4.1 SDK, когда я поставил точку останова в моем коде и пошаговом по инструкции, на каждый шаге, отладчик будет плеваться один или более из этой строки:Получение странного сообщения отладчика: Assertion failed: (cls), function getName: что это?

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

Это не происходит на конкретной линии или для конкретной инструкции. У меня есть несколько точек останова в моем коде, и каждый раз, когда я ударяю один из них, отладчик начинает извергать эти сообщения. По-видимому, это не оказывает отрицательного влияния, так как программа работает правильно. Это очень раздражает, чтобы получить информацию в консоли, когда есть десятки этих строк. Я уверен, что они не отображаются ни для чего, но я не нашел, что может быть проблемой и какая инструкция может вызвать это. Если я не попаду в точку останова, я не вижу ни одной из этих строк. Я очищал и перестраивал проект несколько раз безрезультатно.

Кто-нибудь есть какие-либо идеи, что это такое?

+0

У меня также есть эта проблема, хотя я, кажется, только получаю ее с симулятором iPad, а не когда я запускаю симулятор iPhone. –

+0

У вас тоже проблема. Он появился, когда я (необычно) запустил приложение на симуляторе. У вас есть это на Sim или на устройстве или на обоих? – Kalle

ответ

0

У меня точно такая же проблема. Я знаю, что это не полный ответ, но вот что я могу найти.

Соответствующая функция GetName выглядит следующим образом:

/*********************************************************************** 
* 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; 
    } 
} 

Так GDB жалуется, что утверждение утверждают (ЦБС) не удается. Это означает, что getName каким-то образом получает указатель NULL в качестве аргумента.

который является своего рода смешно, где мы могли бы просить имя класса NULL?

Надеется, что это помогает ...

+2

BTW assert (cls), очевидно, обозначен как хак. Это может быть причиной наших проблем? –

+0

У меня нет абсолютно никакой идеи, откуда это происходит. Я не использую NSKeyedUnarchiver. Я преобразовываю NSString в правильный список, но сообщение на консоли появляется в любой инструкции, даже до того, как я отправлю «свойствоList» в строку, поэтому я озадачен. – nemesys

+0

Когда у меня есть время, я думаю, что я попытаюсь добавить точку останова в эту функцию getName, чтобы увидеть, откуда происходят вызовы. Надеюсь, это может сказать мне, что я сделал, что запускает его ... – nemesys

0

У меня тоже есть такая же проблема; У меня нет решения, но я могу обойти его. Короче говоря, я предлагаю вам добавить больше контрольных точек ...

я заметил в стеке вызовов, что это на самом деле отладчик, который плохо себя. Функция gdb_class_getClass вызывает getName, предположительно это пропускает NULL вместо (скажем) MyClass. Код, который я пытаюсь отлаживать, - это метод MyClass. Поэтому, полагая, что у отладчика есть проблема с MyClass, я устанавливаю точку останова на строку вне любого кода MyClass (т.е. строку, вызывающую метод на MyClass), и ударяю, продолжая, когда программа ломается. Кажется, это решение проблемы в моем случае. (Обратите внимание, что автоматического продолжения не работает.)

Чтобы было ясно:

//Set breakpoint here 
[myClassInstance buggyMethod]; 

Мои buggyMethod на самом деле в другом файле:

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

Надежда, что помогает.

0

У меня аналогичная проблема, но у меня это с созданием пользовательского представления с основным текстом в нем. Как только мой взгляд в DrawRect называет линия

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

Он висит приложение, будь то в тренажере или на устройстве. Как ни странно, я могу исправить это путем инициализации другого текстового компонента UIKit в методе viewDidLoad View Controller ... Мне даже не нужно добавлять его в качестве подвью. Это похоже на то, что некоторые обычные текстовые элементы загружаются до того, как Core Text может загружаться в шрифтах.

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

Weird.

5

Я столкнулся с этим - и вот причина моя: я использовал +localizedStringFromDate:dateStyle:timeStyle: в моем коде. Работал отлично на iPhone, но он не доступен до 4.0 SDK, поэтому он кашлял на iPad. Посмотрите, вызываете ли вы какую-то рутину, которая больше не доступна в SDK или доступна только в более поздних версиях. Честно говоря, я не могу дождаться 4.1 на iPad!

-Owen

+0

Спасибо, Оуэн, я проверю! – nemesys

2

Я также с этой проблемой, в приложении IPad изначально написано в Xcode 3.2.4 с помощью IOS 3.2 SDK, в настоящее время отлажена в Xcode 3.2.5 с помощью 4.2 SDK, но только когда я устанавливаю симулятор в 3.2 iOS Destination Target (поэтому я могу работать в симуляторе 3.2). Каждая остановка в точке останова в отладчике, я получаю это утверждение повторяется восемь раз. Однократное нажатие на линию получает еще два.

Что я не могу понять, так это то, что я не добавлял никакого кода в проект, так как я его последний раз запускал в Xcode 3.2.4 и iOS SDK 3.2, поэтому я не могу добавить никаких вызовов, которые не присутствовали в этот SDK, иначе он не был бы скомпилирован.

Пока кто-то не найдет ответ на этот вопрос, я думаю, что единственным обходным решением (поэтому я могу продолжить отладку своего кода в среде 3.2) является переустановка Xcode 3.2.4 и использование 3.2 SDK и симулятора.

1

У меня была эта проблема, когда я работал на симуляторе «iPad 3.2 simulator». Эта проблема исчезла, когда я переключил симулятор на «симулятор iPad 4.3»

 Смежные вопросы

  • Нет связанных вопросов^_^