如何在iOS开发工具和脚本不可用的linux环境中上传到服务器后,对ios崩溃报告进行符号化.我知道Apple使用atos和其他一些工具将十六进制地址与.dYSM文件一起映射到符号.
我可以将.dYSM文件和崩溃报告上传到服务器.提到QuincyKit,但他们在本地进行符号化.但其他人如HockeyApp和Critterism正在远程进行.
请建议在服务器中执行此操作的可能方法.
有可能的.你可以看看https://github.com/facebook/atosl
我在Linux下工作了.(Ubuntu Server)但是,它需要一些时间才能启动并运行.
atosl首先,您需要安装libdwarf-dev,dwarfdump,binutils-dev和libiberty-dev.
例如在Ubuntu上:
$ sudo apt-get install libdwarf-dev dwarfdump binutils-dev libiberty-dev
Run Code Online (Sandbox Code Playgroud)
从GitHub下载或克隆atosl repo:
$ git clone https://github.com/facebook/atosl.git
Run Code Online (Sandbox Code Playgroud)
光盘到atosl目录
$ cd atosl
Run Code Online (Sandbox Code Playgroud)
创建一个本地配置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
Run Code Online (Sandbox Code Playgroud)
编译它:
$ make
Run Code Online (Sandbox Code Playgroud)
现在你可以开始使用它了:
$ ./atosl --help
Run Code Online (Sandbox Code Playgroud)
为了说明如何atosl使用,我将提供一个简单的例子.
现在让我们看一下崩溃日志中的一行:
13 ErrorApp 0x000ea294 0xe3000 + 29332
Run Code Online (Sandbox Code Playgroud)
为了象征这一点,我们需要和load address,以及runtime address.
在这个例子中runtime address是0x000ea294,而且load address是0xe3000.
现在我们拥有了所需的一切:
$ ./atosl -o [YOUR_dSYM_FILE] -l [LOAD_ADDRESS] [RUNTIME_ADDRESS]
Run Code Online (Sandbox Code Playgroud)
在这个例子中:
$ ./atosl -o ErrorApp.app.dSYM/Contents/Resources/DWARF/ErrorApp -l 0xe3000 0x000ea294
Run Code Online (Sandbox Code Playgroud)
返回符号行:
main (in ErrorApp) (main.m:16)
Run Code Online (Sandbox Code Playgroud)
您vmaddr通常0x00001000可以通过查看__TEXT二进制文件的segname Mach-O加载命令来找到它.在我的例子中,这恰好是不同的,即0x00004000
为了找到它address,我们需要做一些数学运算.
的address是由下式求出:
address = vmaddr + ( runtime_address - load_address )
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们的地址是:
0x00004000 + ( 0x000ea294 - 0xe3000 ) = 0xB294
Run Code Online (Sandbox Code Playgroud)
我还没有玩过这么多,但是现在它似乎给了我需要的结果.也许它也适合你.
您需要实现自己的 linux 兼容版本atos, otooland dwarfdump(至少是符号化所需的功能)。Apple 工具不是开源的,只能在 Mac OS X 上运行。
没有任何服务提供可供第 3 方在非 OS X 系统上使用的解决方案。因此,除了实现在 linux 系统上运行所需的功能之外,您唯一的机会就是在 Mac 上像 QuincyKit 那样做,请参阅https://github.com/TheRealKerni/QuincyKit/wiki/Remote-symbolication或使用第三方服务。
注意:我是 QuincyKit 的创建者和 HockeyApp 的联合创始人。
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |