我的一个应用程序(发布版)没有响应,所以我不得不强制-退出它。
OS提供了一个Hang (没有崩溃报告),我将其复制到一个*.crash文件中。
我知道我可以直接使用HockeyApp或atos之类的服务来象征崩溃报告,但是我如何才能为OS应用程序象征Hang呢?
发布于 2014-12-15 11:05:40
过了一段时间,我发现了如何处理Hang,这些报告与正常的崩溃报告略有不同。我所做的是:
Show Package Contents。*.app和相应的*.dSYM文件从Products复制到一个新文件夹中,例如在桌面上。新文件夹中将有一个MyApp.app和一个MyApp.app.dSYM。文件的命名很重要。ls通过终端进入新文件夹。现在要使用atos工具(“将数字地址转换为二进制图像或进程的符号”),我们首先需要在运行时确定应用程序的加载地址,以及应用程序挂起时堆栈帧的地址。
Heaviest stack for ...行下面的地方写着Heaviest stack for ...的行。在我的例子中,这看起来类似于:
二进制图像:*0x107b0f000**- 0x108b59fff com.company.MyApp 1.1.0 (2) <6080DCE1-9086-311C-899F-CC22B32D694D> /应用程序/MyApp.app/Content/MacOS/MyApp0x7fff897e000- 0x7fff89c87fff libsystem_pthread.dylib (105.10.1) <3103AA7F3BAE-3673-9649-47FFD7E15C97>/usr/lib/system/libsystem_1.1.0/system/lib/ com.apple.AppKit _x7ff8bbbf0bf 000-0x7ff8bbf06f com.apple.AppKit (1344.36)/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit 0x7fff8bd6e000 - 0x7fff8c09cfff com.apple.Foundation 6.9 (1152.12) /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation被**包围的地址0x107b0f000是我们的加载地址,您应该复制它。
在这个示例堆栈跟踪的末尾,您会发现MyApp列出了两次。复制两个地址,0x108b1e5f7,0x108b1add8,并关闭报告。
atos了。在终端中输入以下命令并按返回键:
-o -arch x86_64 -l 0x107b0f000 0x108b1e5f7 0x108b1add8atos将使用同一个目录中的*.dSYM文件来象征无地址,并希望输出如下所示:
-MainWindowController loadDidFinish: (MainWindowController.m:127) -MainWindowController view:stringForToolTip:point:userData: (MainWindowController.m:231)太好了,看起来很有希望!如果atos输出与您放置的地址相同的地址,而不是代码行,那么有些地方出错了。错误的最主要来源可能是错误的内存地址,所以请确保您已经选择了正确的地址。
如果您还有其他问题(@raffael_me),请告诉我。
https://stackoverflow.com/questions/27482638
复制相似问题