ios Symbolication Server端

时间:2013-02-25 15:41:17

标签: objective-c

如何在iOS开发工具和脚本不可用的linux环境中上传到服务器后,将ios崩溃报告符号化。我知道Apple使用atos和其他一些工具将十六进制地址与.dYSM文件一起映射到符号。

我可以将.dYSM文件和崩溃报告一起上传到服务器。提到QuincyKit,但他们在本地进行符号化。但其他人如HockeyApp和Critterism正在远程进行。

请推荐在服务器中执行此操作的可能方法。

2 个答案:

答案 0 :(得分:8)

有可能。您可以查看https://github.com/facebook/atosl

我在Linux下工作了。 (Ubuntu Server)但是,它需要一些时间才能启动并运行。


正在安装atosl

首先,您需要安装libdwarf-devdwarfdumpbinutils-devlibiberty-dev

E.g。在Ubuntu:

$ sudo apt-get install libdwarf-dev dwarfdump binutils-dev libiberty-dev

从GitHub下载或克隆atosl repo:

$ git clone https://github.com/facebook/atosl.git

CD到atosl目录

$ cd atosl

创建一个本地配置config.mk.local,其中包含一个包含binutil应用位置的标记。 (在Ubuntu中默认为/usr/bin)。如果您不确定,可以通过执行cat /var/lib/dpkg/info/binutils.list | less找出并复制文件objdump的路径。例如。如果条目为/usr/bin/objdump,则您的路径为/usr/bin

所以最后,你的config.mk.local应该是这样的:

LDFLAGS += -L/usr/bin

编译:

$ make

现在你可以开始使用它了:

$ ./atosl --help

符号化示例

为了说明如何使用atosl,我将提供一个简单的例子。

现在让我们看看崩溃日志中的一行:

13  ErrorApp    0x000ea294 0xe3000 + 29332

为了表示这一点,我们需要load addressruntime address

在此示例中,runtime address0x000ea294load address0xe3000

现在我们拥有了所需的一切:

$ ./atosl -o [YOUR_dSYM_FILE] -l [LOAD_ADDRESS] [RUNTIME_ADDRESS]

在这个例子中:

$ ./atosl -o ErrorApp.app.dSYM/Contents/Resources/DWARF/ErrorApp -l 0xe3000 0x000ea294

返回符号行:

main (in ErrorApp) (main.m:16)

FYI

您的vmaddr,通常是0x00001000,您可以通过查看二进制文件的segname __TEXT Mach-O加载命令来查找。在我的例子中,这恰好是不同的,即0x00004000

要找到address,我们需要做一些数学运算。

address可通过以下公式找到:

address = vmaddr + ( runtime_address - load_address ) 

在这个例子中,我们的地址是:

0x00004000 + ( 0x000ea294 - 0xe3000 ) = 0xB294

我还没有玩过这么多,但现在它似乎给了我需要的结果。也许它对你也有用。

答案 1 :(得分:3)

您需要实现自己的Linux兼容版atosotooldwarfdump(至少是符号化所需的功能)。 Apple工具不是开源的,只能在Mac OS X上运行。

这些服务都没有提供可供第三方在非OS X系统上使用的解决方案。因此,除了实现在Linux系统上运行所需的功能之外,你唯一的机会就是在像QuincyKit这样的Mac上进行,看看https://github.com/TheRealKerni/QuincyKit/wiki/Remote-symbolication或使用第三方服务。

注意:我是QuincyKit的创建者和HockeyApp的联合创始人。