Swiftソースコードコンパイル環境の構築とコンパイルプロセス

コンパイラ環境
  • バージョンの準備: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プラグインをインストールします。

ここに画像の説明を挿入

  • JSONファイルを次のように構成します。

ここに画像の説明を挿入

  • 構成内容は以下のとおりです。
	"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ソースコードをデバッグできます!

おすすめ

転載: blog.csdn.net/Forever_wj/article/details/110559621