0

这绝对是我见过的最大的单段可执行代码。

在此处输入图像描述

现在在我的 Mac 上构建整个东西变得更容易了(我也一直在尝试在 Linux 上构建 LLDB,目前我正在与那里的 Python 链接作斗争),对此我很感激,但是这个惊人的大可执行文件让我怀疑自己......我做错了什么吗?这个可怕的档案里有什么?

我确实运行了这个:

% otool -TV liblldb-core.a

它产生 1159 行输出,大约包含 350 多个目标文件。听起来不错,我看到 XCode 项目通过大约 350 个源文件运行。

我想我的问题是为什么 LLDB 以这种方式工作,为什么它不是更轻量级,为什么它不只是链接到 LLVM 和 Clang 代码而不是做任何事情?或者,这个档案的内容是否已经是所有 LLDB 特定的代码?我承认构建调试器是一项艰巨的任务,但老实说,这简直令人难以置信。

我知道编译-O3可能会增加可执行文件的大小。不过,我不打算回去重新编译这个怪物(计算机几乎因 smcFanControl 报告 CPU 核心温度高达 106 摄氏度而融化)。

更新:我有点记录了我刚刚在这里所做的一些进一步的学习......我仍然无法找到一个可怕的 liblldb-core.a 或内部的任何东西,XCode.app我仍然对如何这整件事有效。

4

2 回答 2

1

我应该注意到我在 Debug 构建目录中截取了第一个屏幕截图,这表明它可能是巨大的,因为我使用了构建配置。

编辑:不,这不是答案。Release 目录实际上包含一个liblldb-core.a比另一个稍大的目录。

看起来这个巨大的 700MB 档案是某种“副作用”文件。当我归档项目时,它生成了一个 369MB 的.xarchive文件。我确信这是对“内容”的更好表示。我基本上仍然是通过在黑暗中绊倒它来学习这些东西......

更新

哦,好吧,看看这种情况就更有意义了:

在此处输入图像描述

在 Xcode 中构建这些文件后,我将这些文件从 Release 目录中取出(并对其进行了最低限度的调整以-O3用于 Release)。我可以在这里看到,dSYM包含调试信息的 ~350MB 文件占用了之前文件的大部分空间.xarchive,实际上lldb可执行代码的总大小不到 40MB,其中大部分驻留在该框架中名为的可执行文件中LLDB.

这对我来说更合理。现在我已经将它从 Xcode 中取出并放入了我的 Documents 目录,在那里我可以更加确信没有外部程序会在我不知情的情况下删除或修改它,我可以将它从这里符号链接到/usr/lib/lldb.

于 2013-07-04T00:39:38.407 回答
1

真正的问题是调试信息liblldb-core.a。750MB 中约有 720MB 是 DWARF。(您可以自己测试它 -ar x liblldb-core.a进入一个目录,然后strip -S *.o您将拥有大约 32MB 的.o文件。)没有真实类型唯一性的 DWARF 对 C++ 程序有一些讨厌的膨胀。

我可以制作一个.tar.gz(剥离的)LLDB 框架和 lldb 驱动程序,它们在压缩后大约有 10MB 左右——这是在链接 lldb 所需的所有 llvm 和 clang 位之后。这里没有什么特别离谱的,即使中间步骤看起来很疯狂。

于 2013-07-04T07:58:55.680 回答