Как я могу получить доступ к быстрой переменной удобства из objc в lldb? - PullRequest
3 голосов
/ 08 марта 2019

Я пытаюсь установить некоторую вспомогательную переменную в быстром контексте и получить доступ к ней из контекста ObjC.

(lldb) expression -l swift -- var $answerSwift = 42
(lldb) expression -o -l swift -- $answerSwift
42
(lldb) expression -o -l objc -- $answerSwift
error: use of undeclared identifier '$answerSwift'

Другой способ работает отлично:

(lldb) expression -l objc -- int $answerObjc = 42
(lldb) expression -o -l swift -- $answerObjc
42

Как я могу переместить значение из быстрой области (?) В область objC?

1 Ответ

1 голос
/ 24 марта 2019

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

Так что это будет работать для точек останова в быстром коде:

(lldb) expression -l swift -- var $answerSwift = 42
(lldb) expression -o -l objc -- `$answerSwift`
42

Когда у меня есть точка останова в коде swift, я пытался установить переменную objc следующим образом:

(lldb) expression -l objc -- id $label = (id)self.label
error: use of undeclared identifier 'self'

Контекст objc не может получить доступ к переменной swift self,таким образом, это терпит неудачу.

Но, помещая self.label в кавычки, чтобы создать временный быстрый контекст, я могу назначить его переменной objc:

(lldb) expression -l objc -- id $label = (id)`self.label`
(lldb) expression -l objc -O -- $label
<UILabel: 0x7f8030c03c40; frame = (44 44; 42 21); text = 'Label'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x6000019b35c0>>

...