根据this question,我无法让LLDB在调试时显示实际的源代码。
感谢关于该问题的accepted answer,我已经将问题追溯到Tup如何构建变体(例如调试,生产等):
.o
文件和可执行文件本身)
醇>
因此,LLDB在调试时无法找到原始源文件。
所以我的问题是:我怎么能强迫Tup为构建过程提供不同的路径,或者告诉LLDB实际发生了什么?
答案 0 :(得分:1)
我能够分两部分来解决这个问题:
<强> 1。让Tup使用准确的路径
首先,为了使可执行文件在其实际位置引用.o
文件,必须使Tup在chroot(more info here和in the docs)中运行。这是通过将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
文件仍然引用源文件,就好像它们在build子目录中,而不是主目录,导致:
<强> 2。告诉LLDB在哪里寻找来源
因此,LLDB认为来源位于/Users/leo/project/subdirectory/code
但实际上是/Users/leo/project/code
。通过告知LLDB将一条路径替换为另一条路径,按照this question解决了这个问题:
(lldb) settings set target.source-map /Users/leo/project/subdirectory /Users/leo/project
(这似乎不适用于相对路径,这是一种耻辱,因为它意味着需要每个开发机器解决方案。如果有人知道无论项目在哪里都能工作的解决方案那么让我知道!)
您也可以通过让LLDB源代码中包含此行的文件来自动执行此操作:lldb -s path/to/lldb/config/file
。