Objective c ios符号服务器端
在无法使用ios开发工具和脚本的linux环境中,如何在上传到服务器后对ios崩溃报告进行符号化。我知道苹果使用atos和其他一些工具将十六进制地址和.dYSM文件一起映射到符号 我可以将.dYSM文件和崩溃报告一起上传到服务器。参考了QuincyKit,但他们在当地做象征。但其他的如曲棍球应用程序和Criterism都是远程操作的Objective c ios符号服务器端,objective-c,Objective C,在无法使用ios开发工具和脚本的linux环境中,如何在上传到服务器后对ios崩溃报告进行符号化。我知道苹果使用atos和其他一些工具将十六进制地址和.dYSM文件一起映射到符号 我可以将.dYSM文件和崩溃报告一起上传到服务器。参考了QuincyKit,但他们在当地做象征。但其他的如曲棍球应用程序和Criterism都是远程操作的 请推荐在服务器上执行此操作的可能方法。您需要实现自己的linux兼容版本的atos、otool和dwarfdump(至少是符号化所需的功能)。苹果的工具不是开源的,
请推荐在服务器上执行此操作的可能方法。您需要实现自己的linux兼容版本的
atos
、otool
和dwarfdump
(至少是符号化所需的功能)。苹果的工具不是开源的,只在MacOSX上运行
这些服务都不提供可供第三方在非OS X系统上使用的解决方案。因此,除了实现在linux系统上运行所需的功能外,您唯一的机会就是在Mac上运行,就像QuincyKit Dos it、see或使用第三方服务一样
注:我是QuincyKit的创建者和HockeyApp的联合创始人。这是可能的。你可以看看 我让它在Linux下工作。(Ubuntu服务器)然而,它需要一些时间来启动和运行
安装atosl
首先,您需要安装libdwarf-dev
,dwarfdump
,binutils-dev
和libiberty-dev
例如,在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
为了表示这一点,我们需要加载地址
,以及运行时地址
在此示例中,运行时地址
为0x000ea294
,加载地址
为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
,您可以通过查看二进制文件的segnameuu TEXT
Mach-O load命令找到。在我的示例中,这恰好是不同的,即0x00004000
要找到地址
,我们需要做一些数学运算
地址
可通过以下公式找到:
address = vmaddr + ( runtime_address - load_address )
在本例中,我们的地址是:
0x00004000 + ( 0x000ea294 - 0xe3000 ) = 0xB294
我还没有玩过这么多,但现在它似乎给了我需要的结果。也许它也适用于你。你确定HockeyApp和Criterism没有运行OSX服务器而不是Linux吗?即使他们使用的是OX服务器,也很难为一个简单的应用程序提供基础设施。最好是在软件上下功夫,而不是在硬件上下功夫。好吧,我想就这样吧。我不知道你在说什么。会实现上述工具的自己版本吗?这个解决方案会用于像HockeyApp这样的APM服务吗?