Часы Xcode 'неверное выражение' - PullRequest
0 голосов
/ 10 января 2019

Я перебираю некоторый код Swift в XCode и хотел бы посмотреть значения. Следуя совету во многих ответах здесь (например, этот ), я могу добавить выражение в окно локальных переменных.

Точка останова, на которой я нахожусь, является последней строкой этого фрагмента из библиотеки Starscream ( daltoniam ), которую я включаю в качестве модуля.

for i in 0..<dataLength {
  buffer[offset] = data[i] ^ maskKey[i % MemoryLayout<UInt32>.size]
  offset += 1
}
var total = 0

Я добавил два выражения для просмотра:

  1. buffer[0] и
  2. MemoryLayout<UInt32>.size

Для обоих значений я вижу "недопустимое выражение":

xcode screenshot

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

N.B. Если я вызываю p buffer[0] из приглашения lldb, я получаю загадочную ошибку:

(lldb) p буфер [0]
ошибка: предупреждение:: 12: 9: предупреждение: инициализация переменной
'$ __ lldb_error_result' никогда не использовался; рассмотрите возможность замены присвоением '_'
или удаляя его
var $ __ lldb_error_result = __lldb_tmp_error
~~~~ ^ ~~~~~~~~~~~~~~~~~~~
_

ошибка:: 19: 5: ошибка: значение типа 'WebSocket' не имеет члена
'$ __ lldb_wrapped_expr_72' $ __ lldb_injected_self. $ __ lldb_wrapped_expr_72 ( ^ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~

Я попытался изменить подфайл (согласно ответу Джима ), чтобы он явно получил код отладки:

pod 'Starscream', '~> 3.0.6', :configuration => 'Debug'

и я даже дошел до удаления модулей, клонирования Starscream и включения исходного кода в качестве подпроекта. Я все еще получаю ту же ошибку.

1 Ответ

0 голосов
/ 16 января 2019

Выражение, которое обращается к buffer[0], где буфер является UnsafeMutablePointer, работает правильно в синтаксическом анализаторе выражений, когда я остановлен в какой-то простой функции. А из вашего опыта работы с командой expr похоже, что ваша проблема не в этом конкретном выражении. Скорее всего, в контексте, в котором вы остановились, есть что-то, что полностью отключает анализатор выражений.

Убедитесь, что вы не используете двоичные Cocoapods и что вы перестроили весь свой код, и все используемые вами модули были перестроены с нуля с помощью того же быстрого компилятора. В настоящее время lldb и swiftc заблокированы по версии - lldb может отлаживать только те программы, которые созданы с использованием swiftc, с которым он поставляется.

Если это не решит проблему, тогда нам нужно выяснить, что насчет конкретной функции, в которой вы остановились, и которая вызывает проблему. Похоже, с такими вещами лучше справиться, заполнив сообщение об ошибке в проекте swift (http://bugs.swift.org).

...