Как я могу исправить ошибку «Невозможно создать Swift scratch context» при использовании LLDB - PullRequest
2 голосов
/ 20 февраля 2020

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

Невозможно создать скретч-контекст Swift (не удалось загрузить stdlib Swift) Невозможно создать скретч-контекст Swift (не удалось загрузить stdlib Swift) Дамп стека: 0. Аргументы программы: / Applications / Xcode. app / Contents / Developer / usr / bin / lldb [1] 77539 ошибка сегментации lldb

Не имеет значения, что я пытаюсь импортировать.

~ ❯❯❯ lldb
(lldb) expression -l swift -- import AppKit
Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/usr/bin/lldb
[1]    6665 segmentation fault  lldb
~ ❯❯❯ lldb                                                                                                                                                        ✘ 139
(lldb) expression -l swift -- import Foundation
Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/usr/bin/lldb
[1]    7122 segmentation fault  lldb
~ ❯❯❯ lldb                                                                                                                                                        ✘ 139
(lldb) expression -l swift -- import UIKit
Cannot create Swift scratch context (couldn't load the Swift stdlib)Cannot create Swift scratch context (couldn't load the Swift stdlib)Stack dump:
0.  Program arguments: /Applications/Xcode.app/Contents/Developer/usr/bin/lldb
[1]    7225 segmentation fault  lldb
~ ❯❯❯                                                                                                                                                             ✘ 139

Что интересно, те же самые команды работают при использовании LLDB в Xcode.

1 Ответ

1 голос
/ 20 февраля 2020

В моем терминале работает следующий диалог:

themini:~ mattneubelcap$ swift
Welcome to Apple Swift version 5.1.3 (swiftlang-1100.0.282.1 clang-1100.0.33.15).
Type :help for assistance.
  1> :
(lldb) expr -lSwift -- import Foundation
(lldb) expr -lSwift -- "howdy" as NSString

Успех второй команды доказывает, что Foundation был успешно импортирован. Если нет, мы получили бы error: use of undeclared type 'NSString'.

Обратите внимание на отсутствие пробела между -l и Swift. Я не знаю, почему «те же самые команды» работают с использованием LLDB в Xcode, то есть с пробелом. Конечно, если вы наберете help expr, у вас будет впечатление, что -l Swift должно работать. Тем не менее эксперимент показывает, что в Терминале он должен быть либо -lSwift (без пробела), либо --language Swift (пробел), как и большинство команд командной строки. Может ли быть так, что Xcode LLDB более простителен или придерживается других правил синтаксиса (использует другой парсер)? Не имею представления.

...