コンパイラ環境
- バージョンの準備:macOS 10.15.3 Xcode 11.5
- brew install cmake njnia
- Python 2.X
- Swiftソースアドレス:Apple / Swift
コンパイルプロセス
①クローンソースコード
git clone --branch swift-5.2.4-RELEASE https://github.com/apple/swift.git
- ここでは、swift-5.2.4-RELEASEをコンパイルします。これは、ソースコードをコンパイルするときに使用するバージョンだからです。
- 更新されたソースコードをコンパイルする必要がある場合は、公式Webサイト(Apple / Swift)で対応するバージョンを見つけることができます。同時に、一致するXcodeの対応するバージョンに注意してください(公式ドキュメントがコンパイルされるときに特定の指示があります)。
- クローンは次のように実行されます。
Cloning into 'swift'...
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1170695 (delta 0), reused 0 (delta 0), pack-reused 1170694
Receiving objects: 100% (1170695/1170695), 614.74 MiB | 9.37 MiB/s, done.
Resolving deltas: 100% (953771/953771), done.
Note: switching to '0bab712aea8f0eb74f3acc303d96857f697a98d8'.
②アップデート-チェックアウト
- 現在のディレクトリがswift-sourceの下にあることを確認してから、次のコマンドを実行します。
./swift/utils/update-checkout --tag swift-5.2.4-RELEASE --clone
Skipping cmake on Darwin
Skipping icu on Darwin
Skipping clone of 'sourcekit-lsp', directory already exists
Skipping clone of 'swift-syntax', directory already exists
Skipping clone of 'cmake', requested by user
Skipping clone of 'swift-xcode-playground-support', directory already exists
Skipping clone of 'swift-format', directory already exists
Skipping clone of 'indexstore-db', directory already exists
Skipping clone of 'swift-stress-tester', directory already exists
Skipping clone of 'llvm-project', directory already exists
Skipping clone of 'llbuild', directory already exists
Skipping clone of 'cmark', directory already exists
Skipping clone of 'swift-corelibs-foundation', directory already exists
Skipping clone of 'swift-tools-support-core', directory already exists
Skipping clone of 'swift-corelibs-xctest', directory already exists
Skipping clone of 'ninja', directory already exists
Skipping clone of 'swift-integration-tests', directory already exists
Skipping clone of 'swiftpm', directory already exists
Skipping clone of 'swift', directory already exists
Skipping clone of 'swift-corelibs-libdispatch', directory already exists
Skipping clone of 'icu', requested by user
- update-checkoutはswift関連のライブラリのクローンを作成してコンパイルするため、この手順は特に重要です。そうしないと、swiftのコンパイルプロセスが後で失敗します。
③コンパイル
- コンパイルプロセス中に、njniaまたはXcodeのいずれかを使用してコンパイルできます。実際のコンパイルおよびテストプロセスでは、Xcodeコンパイル後のサポートは特に良くありません。コンパイルには、njniaを使用することをお勧めします。
- 迅速なソースコードのスクリプトを使用してコンパイルします。
./swift/utils/build-script -x -R --debug-swift
- または、次のスクリプトを実行してコマンドを表示します。
./swift/utils/build-script -r --debug-swift-stdlib --lldb
④DebugSwift
- XcodeでSwiftプロジェクトを開くには、/ swift-source / build / Xcode-ReleaseAssert + swift-DebugAssert / swift-macosx-x86_64 /Swift.xcodeprojを開きます。
- 利用可能なすべてのターゲットに対して多くのシナリオが自動的に作成されます。一般的なデバッグプロセスには、次のものが含まれます。
- 迅速なスキームを選択してください。
- スキームエディタを起動します(⌘⇧<)。
- [引数]タブを選択し、[+]をクリックします。
- 必要に応じて設定するコマンドラインオプションを追加します。特別な必要がない場合は、通常どおりにコンパイルします。
- スキームエディタを閉じます。
- コンパイルして実行します。
⑤VSCodeを使用してSwiftをデバッグする
- 以下に示すように、VSCodeを開いてCodeLLDBプラグインをインストールします。
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/build/Ninja-RelWithDebInfoAssert+stdlib-DebugAssert/swift-macosx-x86_64/bin/swift",
"args": [],
"cwd": "${workspaceFolder}"
}
]
- 注:上記のプログラムファイルパスは、コンパイルしたファイルパスと同じである必要があります。
- 実行後:
- .swiftファイルをデバッグする場合、上記の3つの状況が表示されない場合があります。解決策は次のとおりです。
- まず、次のようにLLDBのインストールパスを見つけます。
- 次に、コンパイルされたLLDBのファイルパスを見つけ、その中のすべてのファイルを上記のディレクトリにコピーします。
- 同時に、CodeLLDBのlibファイルの下にあるdylibファイルを変更します。
- ターミナルに切り替えると、Swiftソースコードをデバッグできます!
- ターミナルに次のコードを入力します(swiftファイルからコピーすることもできます)。
- ソースコードで* _swift_allocObjectを検索し、ブレークポイントを追加します。
- ターミナルにvart = YDWTeacher()と入力し続け、Enterキーを押します。
- これで、Swiftソースコードをデバッグできます!