在构建Tup变体时如何让LLDB找到源代码?

时间:2016-05-08 18:47:45

标签: lldb tup

根据this question,我无法让LLDB在调试时显示实际的源代码。

感谢关于该问题的accepted answer,我已经将问题追溯到Tup如何构建变体(例如调试,生产等):

  1. 它适用于每个变体的子目录
  2. 将源复制到子目录
  3. 在子目录
  4. 中构建所有输出(.o文件和可执行文件本身)

    因此,LLDB在调试时无法找到原始源文件。

    所以我的问题是:我怎么能强迫Tup为构建过程提供不同的路径,或者告诉LLDB实际发生了什么?

1 个答案:

答案 0 :(得分:1)

我能够分两部分来解决这个问题:

<强> 1。让Tup使用准确的路径

首先,为了使可执行文件在其实际位置引用.o文件,必须使Tup在chroot(more info herein 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