我可以分两部分解决这个问题:
1.让 Tup 使用准确的路径
首先,为了让可执行文件引用它们实际位置的.o 文件,必须使Tup 在chroot 中运行(more info here 和in the docs)。这是通过在 Tup 命令中的插入符号后放置 c 来完成的。
所以我的构建命令来自类似
: 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。根据this question,通过告诉 LLDB 用一条路径替换另一条路径来解决此问题:
(lldb) settings set target.source-map /Users/leo/project/subdirectory /Users/leo/project
(这似乎不适用于相对路径,这很遗憾,因为这意味着需要每个开发机器的解决方案。如果有人知道无论项目在哪里都可以工作的解决方案,那么请告诉我知道!)
您还可以通过让 LLDB 获取包含以下行的文件来自动执行此操作:lldb -s path/to/lldb/config/file。