lldb Xcode: ошибка: «printf» не является допустимой командой

Я использую Xcode 4.3.3 и хочу установить символические конечные точки. Я создал символическую точку останова для всех символов objc_msgSend и хотел объединить ее с «выводом отладчика».

Я следовал советам этот пост в SO. Однако в моем отладчике сообщение

ошибка: 'printf' не является допустимой командой.

появляется. Любая подсказка? Я хочу, чтобы для каждого вызова функции сообщение [метод класса] печаталось в области отладчика. Нравится

[UIApplication sharedApplication]
[UIApplication _isClassic]
[NSCFString getCString:maxLength:encoding:]
[UIApplication class]
[SLSMoleculeAppDelegate isSubclassOfClass:]
[SLSMoleculeAppDelegate initialize]

person cateof    schedule 02.10.2012    source источник


Ответы (1)


Он работает с lldb, если вы добавляете префикс «expr --» к команде отладчика в настройках точки останова:

expr -- (void)printf("[%s, %s]\n",(char *) object_getClassName(*(long*)($esp+4)), (char *) *(long *)($esp+8) )

Однако решение не идеально, потому что отладчик выводит «нет результата» после каждого вывода:

[OS_xpc_dictionary, _xref_dispose]
<no result>
[NSObject, initialize]
<no result>
[OS_object, initialize]
<no result>

Я не нашел ничего, чтобы подавить вывод «нет результата», возможно, это невозможно, см. этот Open Radar< /а>.

person Martin R    schedule 02.10.2012
comment
@JasonMolenda: Спасибо за информацию. Я только что протестировал его с LLDB-167.4, который является частью текущего Xcode 4.5.1, и результат все еще не печатается. - person Martin R; 06.10.2012
comment
Да, его регистрация была более поздней, чем тот релиз; lldb-168 и более поздние версии должны иметь это изменение. - person Jason Molenda; 07.10.2012
comment
Кстати, причина, по которой изменение с начала августа отсутствует в выпуске в начале октября, связана с ветвлением выпуска ... lldb-167.2 был выпущен в Xcode 4.5 в сентябре; Xcode 4.5.1 был точечным выпуском, в котором было исправлено несколько пропущенных ошибок. Должно быть, они решили включить пару исправлений в lldb в выпуск 4.5.1, поэтому они скопировали эти изолированные исправления в ветку lldb-167 и в конце сентября создали lldb-167.4. Они не импортировали все изменения за последние два месяца, нужны были только отдельные исправления, чтобы не было внесено других ошибок. Следующий большой выпуск должен включать исправление. - person Jason Molenda; 07.10.2012
comment
И просто чтобы продолжить все это - вывод <no result> не произойдет с Xcode 4.6.x, я только что проверил с lldb-179.5. - person Jason Molenda; 02.05.2013
comment
В настоящее время я получаю сообщение об ошибке: использование необъявленного идентификатора «$ esp» при попытке использовать это, есть идеи, почему? - person BarrettJ; 29.05.2013
comment
@BarrettJ: Это на 64-битной версии или на руке? Тогда это может помочь: stackoverflow.com/a/16346300/1187415. - person Martin R; 29.05.2013