0

この質問のとおり、デバッグ時に LLDB に実際のソース コードを表示させることができません。

その質問に対する受け入れられた回答のおかげで、Tup がバリアントをビルドする方法 (デバッグ、プロダクションなど) に問題を突き止めることができました。

  1. バリアントごとのサブディレクトリで動作します
  2. ソースをサブディレクトリにコピーしません
  3. サブディレクトリにすべての出力(ファイルと実行可能ファイル自体)を構築します.o

このため、LLDB はデバッグ時に元のソース ファイルを見つけることができません。

私の質問は次のとおりです。ビルド プロセスにさまざまなパスをフィードするように Tup を強制するか、実際に何が起こっているかを LLDB に伝えるにはどうすればよいですか?

4

1 に答える 1

2

これを2つの部分で解決できました:

1. Tup に正確なパスを使用してもらう

まず、実行可能.oファイルが実際の場所にあるファイルを参照するように、Tup を chroot で実行する必要があります (詳細はこちらドキュメントを参照)。cこれは、Tup コマンドでキャレットの後に置くことによって行われます。

だから私のビルドコマンドは次のようなものから来ました

: foreach code/*.cpp |> ^o compile %f^ $(COMPILER) $(COMPILER_FLAGS) %f -o %o |> %B.o {code_object_files}

: foreach code/*.cpp |> ^oc compile %f^ $(COMPILER) $(COMPILER_FLAGS) %f -o %o |> %B.o {code_object_files}`

これにより、実行可能ファイルへの正しいパスが取得されましたが、.oファイルはメイン ディレクトリではなく、ビルド サブディレクトリにあるかのようにソース ファイルを参照していたため、次のようになりました。

2. ソースを探す場所を LLDB に伝える

そのため、LLDB はソースが にあると考えていますが、/Users/leo/project/subdirectory/code実際には にあり/Users/leo/project/codeます。これは、この質問に従って、あるパスを別のパスに置き換えるように LLDB に指示することで解決されます。

(lldb) settings set target.source-map /Users/leo/project/subdirectory /Users/leo/project

(これは相対パスでは機能しないようでした。これは、開発マシンごとのソリューションが必要であることを意味するため、残念です。プロジェクトがどこにあるかに関係なく機能するソリューションを誰かが知っている場合は、私に知らせてください!)

また、次の行を含むファイルを LLDB ソースにすることで、これを自動化することもできます: lldb -s path/to/lldb/config/file.

于 2016-05-08T18:47:44.763 に答える