【问题标题】:why can't lldb > v320.4.160 find my source files anymore?为什么 lldb > v320.4.160 找不到我的源文件了?
【发布时间】:2016-07-13 00:28:51
【问题描述】:

我通过外部构建系统使用 Xcode 进行 C++ 开发。如果我使用 Xcode 6.2 (lldb 320.4.160) 一切正常,我可以设置断点,它们被击中 - 一切都很好。但是,如果我想升级到更新版本的 Xcode,例如7.3 (lldb 350.0.21.3) 我的断点不再被击中。到目前为止,我的研究告诉我,新的 lldb 出于某种原因无法设置断点。

一旦我停止执行程序并输入(lldb) breakpoint list,我的输出将如下所示:

Current breakpoints:
  1: file = '/full/path/to/src/main.cpp',       line = 842, exact_match = 0, locations = 0 (pending)
  2: file =     '/full/path/to/src/class.cpp', line    = 383, exact_match = 0, locations = 0 (pending)
  3: file = '/full/path/to/src/Homie.cpp',  line = 12, exact_match = 0, locations = 0 (pending)

末尾的(pending) 表示无法正确设置bp。如果我现在通过breakpoint set --file main.cpp --line 842 在 lldb 中设置断点,我会得到一个断点,其中(lldb) breakpoint list 给出以下输出:

4: file = 'main.cpp', line = 12, exact_match = 0, locations = 1, resolved = 1, hit count = 0
  4.1: where = TEST`::__cxx_global_array_dtor() + 29 at main.cpp:842, address = 0x000000010027130d, resolved, hit count = 0 

这个断点在程序执行期间被命中 - 一切都很好

如果我尝试使用 Xcode 6.2 在同一可执行文件上设置断点,即使使用完整的文件路径,调试器也可以成功找到源文件。

如何让新的lldb版本正确设置断点?

谢谢!

【问题讨论】:

    标签: c++ xcode debugging lldb


    【解决方案1】:

    Xcode 总是使用源的完整路径的概念来设置文件和行断点。当 Xcode 构建项目时,它可以确保它是“源代码的完整路径”,并且它为编译器提供的内容(以及编译器随后在调试信息中写入的内容)是相同的。但是对于外部构建系统,它们可能不一样(例如,构建系统可能通过复杂的相对路径或符号链接等来引用路径)调试器不会解析所有源文件路径的路径,这对于大型项目来说太昂贵了。因此,如果这些不匹配通过完整路径设置断点将不起作用。

    您可以通过设置断点,然后找到该位置的地址(在上面的示例中为 0x000000010027130d)并运行命令来找出调试器认为您的 main.cpp 的路径:

    (lldb) image lookup -va 0x000000010027130d
    

    其中一个输出行将是编译单元:

      CompileUnit: id = {0x00000000}, file = "/tmp/hello-world.c", language = "c99"
    

    这里给出的完整路径是否与您在 Xcode 设置断点时看到的路径相同。如果是,那么我不知道可能出了什么问题,但如果不是,您知道原因,这可能会为您指明解决问题的方向。

    【讨论】:

    • 是的,这实际上是问题所在。感谢您提示如何找出二进制文件中实际构建的路径。调试器寻找full/path/to/./src/main.cpp,这显然不能被调试器解决。我更改了 makefile src 路径,现在可以正常工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2018-02-14
    • 2018-02-17
    • 2013-07-11
    相关资源
    最近更新 更多