如何在iOS开发工具和脚本不可用的linux环境中上传到服务器后,将ios崩溃报告符号化。我知道Apple使用atos和其他一些工具将十六进制地址与.dYSM文件一起映射到符号。
我可以将.dYSM文件和崩溃报告一起上传到服务器。提到QuincyKit,但他们在本地进行符号化。但其他人如HockeyApp和Critterism正在远程进行。
请推荐在服务器中执行此操作的可能方法。
答案 0 :(得分:8)
有可能。您可以查看https://github.com/facebook/atosl
我在Linux下工作了。 (Ubuntu Server)但是,它需要一些时间才能启动并运行。
atosl
首先,您需要安装libdwarf-dev
,dwarfdump
,binutils-dev
和libiberty-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 address
和runtime address
。
在此示例中,runtime address
为0x000ea294
,load address
为0xe3000
。
现在我们拥有了所需的一切:
$ ./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)
您的vmaddr
,通常是0x00001000
,您可以通过查看二进制文件的segname __TEXT
Mach-O加载命令来查找。在我的例子中,这恰好是不同的,即0x00004000
要找到address
,我们需要做一些数学运算。
address
可通过以下公式找到:
address = vmaddr + ( runtime_address - load_address )
在这个例子中,我们的地址是:
0x00004000 + ( 0x000ea294 - 0xe3000 ) = 0xB294
我还没有玩过这么多,但现在它似乎给了我需要的结果。也许它对你也有用。
答案 1 :(得分:3)
您需要实现自己的Linux兼容版atos
,otool
和dwarfdump
(至少是符号化所需的功能)。 Apple工具不是开源的,只能在Mac OS X上运行。
这些服务都没有提供可供第三方在非OS X系统上使用的解决方案。因此,除了实现在Linux系统上运行所需的功能之外,你唯一的机会就是在像QuincyKit这样的Mac上进行,看看https://github.com/TheRealKerni/QuincyKit/wiki/Remote-symbolication或使用第三方服务。
注意:我是QuincyKit的创建者和HockeyApp的联合创始人。