Каково решение для "ошибки: не может выражение IRGen, никакой дополнительной ошибки" на Xcode 10.1? - PullRequest
0 голосов
/ 20 февраля 2019

У нас есть большой проект с множеством зависимостей, введенных через Карфаген.Всякий раз, когда мы пытаемся посмотреть переменную в отладчике lldb (p variablename), она выдает нам ошибку: error: Couldn't IRGen expression, no additional error

Ни один из обходных путей не очень хорош.Мы можем запустить карфаген с --no-use-binaries, чтобы обойти его, но сборка занимает слишком много времени.Мы можем использовать fr v для некоторых переменных, но не для всех.Люди исправили это в предыдущих версиях Xcode, изменив разрешения для некоторых каталогов Swift, но я не могу найти соответствующие каталоги в Xcode 10.1.И я видел, как кто-то сказал, что изменение системы сборки назад и вперед помогло ему, но это не сработало для нас.

Так что я начинаю этот поиск решения специально для Xcode 10.1.Кто-нибудь еще узнал, что является причиной этой ошибки и / или хорошим решением?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Кто-то из моей команды поделился этим решением, которое действительно работает (я не знаю, обнаружил ли он его или нашел его где-либо еще):

Установить точку останова в первой строке AppDelegate didFinishLaunchingWithOptionsметод.Установите для этой точки останова действие: po application

Теперь, когда вы запустите ваше приложение, отладчик остановится на этой точке останова и отобразит этот текст на панели отладчика lldb (с именем вашего приложения вместо Foo):

note: Swift compiler options for Foo conflict with options found in other modules; Switching to a new expression evaluator for Foo, old $R variables are lost.

И тогда отладчик lldb будет работать правильно, способный к p и po переменным и expr выражениям.

НадеюсьНе знаю, почему это работает, но работает и надёжно!

0 голосов
/ 20 февраля 2019

В настоящее время существует жесткое требование, чтобы версия компилятора swift, который вы используете для сборки своего исходного кода, и версия lldb, которую вы используете для отладки, должны исходить из одной и той же цепочки инструментов.В настоящее время отладочная информация swift для типов - это просто сериализация внутренних структур данных компилятора swift.Это также зависит от информации о локальном пути, что затрудняет перемещение.

Существует долгосрочное стремление изменить этот дизайн, но сейчас вам придется перестраивать все свои двоичные файлы каждый раз, когда вы обновляете свои инструменты,и вы не можете использовать готовые двоичные файлы.

Я немного удивлен, что это вызывает повседневные проблемы.Эта полная перестройка должна происходить только тогда, когда вы извлекаете новые источники из Карфагена или обновляете свои инструменты, что не должно быть так часто.Если вы запускаете перестройки чаще, чем это, возможно, зависимости не отслеживаются должным образом, так что перестраивается больше файлов, чем нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...