объект печати в Xcode4 не ведет себя как ожидалось - PullRequest
1 голос
/ 16 августа 2011

Я продолжаю видеть ссылки на возможность выполнения кода из отладчика, но он никогда не работает для меня. Например,

(gdb) po [NSNumber numberWithBool:NO]

дает мне "Нет символа" NSNumber "в текущем контексте." Есть ли настройка, которую мне нужно изменить? Насколько я знаю, у меня есть совершенно нормальная, ненастроенная копия Xcode 4.0.2 (я все еще на Snow Leopard, поэтому не могу обновиться до 4.1).

Обновление - я пробовал в 4.1 на моем ноутбуке - точно такая же ошибка.

Обновление 2 - друг выяснил, что если вы добавляете метод к любому классу в проекте, который возвращает NSNumber, то вышеуказанная команда работает в GDB, даже если метод никогда не вызывается. Также кажется, что это любые методы класса, а не только NSNumber. Методы экземпляра работают нормально.

Может кто-нибудь объяснить, что здесь происходит, и это ожидаемое поведение или ошибка?

Кстати, если вам интересно, почему я хотел бы напечатать это, предыстория здесь: http://objectivistc.tumblr.com/post/8992822737/a-chocking-mystery-po-nsnumber-numberwithbool-no

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Похоже, GDB оптимизирует свою таблицу поиска символов, чтобы символы, на которые нет ссылок в коде, не загружались , поэтому ваш друг в Обновлении 2 смог использовать NSNumber.

Одно простое решение - заменить имена классов на соответствующие вызовы NSClassFromString(), например, заменить NSNumber на NSClassFromString(@"NSNumber"):

po [NSClassFromString(@"NSNumber") numberWithBool:NO]
0 голосов
/ 18 августа 2011

Я не уверен, если это ошибка или намеренно, но это не работает.

Сделайте это вместо:

вызов (NSNumber *) [NSNumber numberWithBool: NO];

Это скажет что-то вроде "результат в 1 доллар". Затем выполните:

po $ 1

...