Проблема LLDB - не удалось запустить 'po' - PullRequest
0 голосов
/ 07 октября 2019

В моем приложении есть определенный файл, который постоянно не отвечает на команды po в консоли. Этот файл имеет единственную функцию, которую, когда я вхожу в точку останова и запускаю po, я вижу:

error: warning: <EXPR>:12:9: warning: initialization of variable '$__lldb_error_result' was never used; consider replacing with assignment to '_' or removing it
    var $__lldb_error_result = __lldb_tmp_error
    ~~~~^~~~~~~~~~~~~~~~~~~~
    _

Конкретная переменная, из которой я выхожу, кажется, не имеет значения, так как, по-видимому, не сработает. То, что я вижу, - то, что эта проблема отладки происходит наиболее последовательно в этом файле.

Так есть ли причина, по которой этот файл может быть поврежден?

1 Ответ

1 голос
/ 09 октября 2019

При оценке выражений lldb должен реплицировать контекст, в котором выполняется выражение. Например, если вы остановились на методе класса, вы ожидаете, что сможете прозрачно ссылаться на ivars, и поиск метода должен быть выполнен при поиске иерархии классов.

Иногда lldb не может понятьвне контекста, и наша неудачная попытка заключить ваше выражение в правильный контекст приводит к выражениям, которые не компилируются. Вот что вы видите.

Например, люди начали делать:

   guard let self = self! {}

в замыканиях, которые слабо захватывают себя. Присутствие двух Я бросило эту реконструкцию контекста для цикла. И есть много других тонкостей, которые lldb должен понять. Свифт - довольно сложный язык в этом отношении.

Так что, если вы видите это в определенном контексте, вы, вероятно, нашли другое проявление этой проблемы. Обязательно попробуйте самый последний Xcode, если можете, так как lldb недавно исправил большое количество ошибок такого рода. Если это все еще не работает, пожалуйста, сообщите об ошибке, либо с помощью http://bugs.swift.org, либо с помощью системы обратной связи Apple.

Кстати, если вам просто нужно проверить переменные, введите команду frame var (псевдоним v в последних версиях lldb часто работает, когда print не удается, так как он не выполняет большинство сложных трюков, которые должен выполнять синтаксический анализатор. v также обычно намного быстрее, так как он просто исследует памятьчем сборка, компиляция, внедрение и запуск выражения в отладчике ...

...