Как проверить «супер» при отладке objc в gdb - PullRequest
8 голосов
/ 30 мая 2011

Изнутри xcode, GDB дает следующее:

> po self
<SomeClassName: 0x6672e50>

Пока все хорошо ... Но:

> po super
No symbol "super" in current context.

В целях ясности я действительно хочу отправить сообщение на super во время отладки. Например, я хочу сделать что-то вроде этого:

> po [super doSomething]

Но как мне ссылаться на super из среды GDB? Спасибо!

Ответы [ 2 ]

4 голосов
/ 30 мая 2011

Здесь нужно иметь в виду, что это super == self. Это тот же указатель объекта, но ключевое слово super указывает коду отправки сообщения, чтобы начать поиск реализации на один уровень назад в иерархии классов.

4 голосов
/ 30 мая 2011

Эй, мы просто только что говорили об этом! Слово super не имеет никакого эффекта, кроме как получатель сообщения, т.е. [super doSomething]. Это просто примечание для компилятора, что он должен искать реализацию метода в суперклассе, а не текущий объект класса.

Если вы хотите фактический объект суперкласса объекта, используйте superclass метод протокола NSObject : [self superclass].


Я не знаю, как делать именно то, что вы хотите. Как насчет крюка отладчика? Поместите это в свой класс:

- (void) callSupersDoSomething {
    [super doSomething];
}

и затем вы можете позвонить [self callSupersDoSomething] из отладчика.

...