【问题标题】:How do I get LLDB to find the source code when building Tup variants?在构建 Tup 变体时如何让 LLDB 找到源代码?
【发布时间】:2016-09-03 08:49:19
【问题描述】:

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

感谢accepted answer 在那个问题上,我已经将问题追溯到 Tup 如何构建变体(例如调试、生产等):

  1. 它在每个变体的子目录中工作
  2. 不会将源代码复制到子目录中
  3. 确实在子目录中构建所有输出(.o 文件和可执行文件本身)

正因为如此,LLDB在调试时找不到原始源文件。

所以我的问题是:我如何才能强制 Tup 将不同的路径输入到构建过程中,或者告诉 LLDB 实际发生了什么?

【问题讨论】:

    标签: lldb tup


    【解决方案1】:

    我可以分两部分解决这个问题:

    1.让 Tup 使用准确的路径

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

    【讨论】:

      猜你喜欢
      • 2019-09-26
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多