【问题标题】:Use top of tree lldb with xcode将树顶lldb与xcode一起使用
【发布时间】:2013-05-01 04:48:31
【问题描述】:

我在 /usr/local/bin 中构建了 lldb 树的顶部,我想告诉 xcode 使用这个二进制文件而不是默认的二进制文件。但我找不到如何/在哪里设置它。

【问题讨论】:

  • 为什么要这样做? LLDB 是否由于某种原因不适合您?
  • 因为我使用的是来自 svn 的 clang,并且在某些日子里,当我在 Xcode 的调试视图中查看帧变量时,Xcode 一直在崩溃。

标签: xcode lldb


【解决方案1】:

很遗憾,这行不通。自从 lldb-179 为 Xcode 4.6.x 分支(约 2012 年 12 月上旬)以来,对 svn 存储库 lldb 进行了一些 API 更改。如果你把从当前 svn 构建的 LLDB.framework 放在 /Applications/Xcode.app/Contents/SharedFrameworks/ 中,当你尝试调试任何东西时,它会导致 Xcode 崩溃。

作为背景,请记住 lldb 确实是一个调试器。 lldb 库在 Mac OS X 上是 LLDB.framework,驱动程序链接到该库。命令行“lldb”程序是一个驱动程序,Xcode 是另一个驱动程序。将来可能会有更多的驱动程序,我们有时会开玩笑说“llgdb”,这是一个具有 gdb 外观但使用 lldb 库来完成所有工作的驱动程序。

lldb 库提供驱动程序代码到/链接到/链接的 API。它是一个 C++ API。在这一点上,它并不打算长期稳定;有时需要对现有方法进行更改,并且必须针对较新版本更新/重新链接驱动程序。这就是为什么如果您放入较新的LLDB.framework,编译为链接到 2012 年 12 月初的 lldb(Xcode 4.6.x)的驱动程序(Xcode)会中断 - 自 12 月以来,API 已多次更改不兼容,并且所以如果你试图混合它们,Xcode 会崩溃。

没有可以从 svn 签出的确切版本来获得与 Xcode 4.6 中包含的相同的 lldb-179 lldb。当需要标记该版本时,选择了一个稳定版本的 lldb 并将其导入苹果内部存储库。那是在 12 年 12 月的第一周左右,从那里进行的任何修订都将与 lldb-179 无法区分。从那时起,Xcode 4.6/lldb-179 有了一些小的更新,例如lldb-179.1、lldb-179.2 等。这些是由苹果内部分支制作的,是 lldb-179 加上一些后来在公共 svn 存储库中精心挑选的修复程序。

除了LLDB.framework提供的C++ API,有趣的是lldb还提供了一个“SB API”。这是python脚本接口的一个术语。您可以完全用 Python 编写真正的调试器驱动程序,使用 SB API 在幕后执行实际的调试器工作。当您直接链接到LLDB.framework 时,这些 python API 比 C++ API 更稳定,但如果将来需要重新审视设计决策,它们偶尔仍需要更改。

顺便说一句,如果我没记错的话,使 Xcode 4.6 无法链接到 svn lldb 的第一个 API 更改是在一月或二月提交的。某些方法必须从采用int 更改为采用uint64_t 或类似的方法。这些是 C++ 方法,因此函数的重命名已更改,必须针对新版本的 lldb 重新编译 Xcode 才能继续链接。

【讨论】:

  • SB API 是什么意思?
  • 你的意思是苹果作为开源基础的分支,因此 xcode 将不再兼容?或者这只是 lldb 源的向后不兼容,并且在下一次更新中它们将保持同步。
  • SB 代表脚本桥。基本上与“LLDB public API”相同。发生的情况是 LLDB 提供了一个 C++ API,其中很大一部分随后通过 SWIG 传递以生成一个 Python 层,即“SB”,即——恰好所有 LLDB API 对象都被命名为 SB_something_(例如 SBProcess、SBType、 ...)
【解决方案2】:

您可以尝试替换以下文件夹 /Applications/Xcode.app/Contents/Developer/usr/bin 中的 lldb 二进制文件 或者这个: /usr/bin/lldb

但是,我还没有尝试过,我不确定该库的非官方版本是否可以与 Xcode 一起使用。

【讨论】:

  • lldb 是真正的调试器库,LLDB.framework 是真正的调试器。 lldb 命令行程序是一种使用LLDB.framework 调试程序的工具。 Xcode 是另一个。如果您只想进行命令行调试,请将 lldb 命令行程序和LLDB.framework 放在一起(以避免 API 不兼容问题)。仅将 svn top-of-tree lldb 命令行程序复制到 /Applications/Xcode.app 不会达到您的预期 - 框架和 lldb 需要一起复制(并且兼容)。另外,Xcodede 也需要兼容。
  • 我怀疑可能是这种情况。感谢您提供额外信息,我在 llvm 网站上找不到太多信息。你有任何相关的链接我可以看看吗?
猜你喜欢
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多