Я не могу заставить этот простой псевдоним LLDB работать

#iphone #ios #debugging #alias #lldb

#iPhone #iOS #отладка #псевдоним #lldb

Вопрос:

Я хочу создать псевдоним LLDB ps, такой, что

  ps foo
  

становится

  print [self foo]
  

Я наблюдал за выступлением LLDB (сеанс WWDC 321 в iTunes), и, исходя из этого, похоже, что псевдоним для этого должен быть таким:

 command alias ps print [ self %1 ]
  

но это не работает. Здесь я предоставил своему приложению делегировать простой метод «count», который возвращает целое число:

 (lldb) command alias ps print [ self %1 ]
(lldb) ps count
error: invalid operands to binary expression ('AppDelegate *' and 'int')
error: 1 errors parsing expression
(lldb) print [ self count ]
(int) $6 = 2
(lldb) 
  

Чего мне не хватает?

Ответ №1:

Кажется, аргументы (%1, %2 и т.д.) Не работают для псевдонима выражения. Есть обходной путь, используя вместо этого регулярное выражение:

 command regex ps 's/(. )/print [self %1]/'
  

Он создает псевдоним ps для приведенного выше регулярного выражения:

 (lldb) ps firstName
print [self firstName]
(NSString *) $1 = 0x06e64e20 @"John"
  

Однако это будет продолжаться до окончания сеанса отладки. Вам придется ввести его снова для следующего сеанса отладки. Если вы хотите, чтобы ваша команда ps сохранялась во время сеансов отладки, вам придется сохранить ее в вашем файле ~/.lldbinit (если он не существует, создайте его).

Смотрите блог llvm для получения дополнительной информации о команде регулярных выражений.

Комментарии:

1. Мне любопытно — у кого-то действительно есть файл ~/.lldbinit, который читается lldb? У меня не было никаких успехов с этим ни через lldb , xcrun lldb ни даже с помощью Xcode.

2. В «псевдониме команды» замены %N работают только для полных значений аргумента или параметра, а не для частей значения аргумента или параметра. Именно из-за этого ограничения, а не из-за чего-то специфичного для выражений, примеры в этом вопросе не работают.

3. Вот вариант, который вы можете использовать с Swift. Он работает с iOS или macOS. Префикс «Swift.» используется для того, чтобы вы могли использовать его при отладке представления macOS (где по умолчанию для печати используется отправка на ваш принтер!). Здесь «mp» представляет «мою печать»: командное регулярное выражение mp ‘s/(. )/ выражение Swift.print (%1)/’